BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】...
題目
“在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調皮又靈敏。他們自由自在生活在那綠色的大草坪,他們善良勇敢相互都關心……” ——選自豬王國民歌 很久很久以前,在山的那邊海的那邊的某片風水寶地曾經存在過一個豬王國。豬王國地理位置偏僻,實施的是適應當時社會的自給自足的莊園經濟,很少與外界聯系,商貿活動就更少了。因此也很少有其他動物知道這樣一個王國。 豬王國雖然不大,但是土地肥沃,屋舍儼然。如果一定要拿什么與之相比的話,那就只能是東晉陶淵明筆下的大家想象中的桃花源了。豬王勤政愛民,豬民安居樂業,鄰里和睦相處,國家秩序井然,經濟欣欣向榮,社會和諧穩定。和諧的社會帶給豬民們對工作火紅的熱情和對未來的粉色的憧憬。 小豬iPig是豬王國的一個很普通的公民。小豬今年10歲了,在大肥豬學校上小學三年級。和大多數豬一樣,他不是很聰明,因此經常遇到很多或者稀奇古怪或者旁人看來輕而易舉的事情令他大傷腦筋。小豬后來參加了全豬信息學奧林匹克競賽(Pig Olympiad in Informatics, POI),取得了不錯的名次,最終保送進入了豬王國大學(Pig Kingdom University, PKU)深造。 現在的小豬已經能用計算機解決簡單的問題了,比如能用P++語言編寫程序計算出A + B的值。這個“成就”已經成為了他津津樂道的話題。當然,不明真相的同學們也開始對他刮目相看啦~ 小豬的故事就將從此展開,伴隨大家兩天時間,希望大家能夠喜歡小豬。 題目描述 豬王國的文明源遠流長,博大精深。 iPig在大肥豬學校圖書館中查閱資料,得知遠古時期豬文文字總個數為N。當然,一種語言如果字數很多,字典也相應會很大。當時的豬王國國王考慮到如果修一本字典,規模有可能遠遠超過康熙字典,花費的豬力、物力將難以估量。故考慮再三沒有進行這一項勞豬傷財之舉。當然,豬王國的文字后來隨著歷史變遷逐漸進行了簡化,去掉了一些不常用的字。 iPig打算研究古時某個朝代的豬文文字。根據相關文獻記載,那個朝代流傳的豬文文字恰好為遠古時期的k分之一,其中k是N的一個正約數(可以是1和N)。不過具體是哪k分之一,以及k是多少,由于歷史過于久遠,已經無從考證了。 iPig覺得只要符合文獻,每一種能整除N的k都是有可能的。他打算考慮到所有可能的k。顯然當k等于某個定值時,該朝的豬文文字個數為N / k。然而從N個文字中保留下N / k個的情況也是相當多的。iPig預計,如果所有可能的k的所有情況數加起來為P的話,那么他研究古代文字的代價將會是G的P次方。 現在他想知道豬王國研究古代文字的代價是多少。由于iPig覺得這個數字可能是天文數字,所以你只需要告訴他答案除以999911659的余數就可以了。
輸入格式
有且僅有一行:兩個數N、G,用一個空格分開。
輸出格式
有且僅有一行:一個數,表示答案除以999911659的余數。
輸入樣例
4 2
輸出樣例
2048
提示
10%的數據中,1 <= N <= 50;
20%的數據中,1 <= N <= 1000;
40%的數據中,1 <= N <= 100000;
100%的數據中,1 <= G <= 1000000000,1 <= N <= 1000000000。
題解
一句話題意:
ans=G∑k|NC(N,k)mod999911659
真是神級題目,模數設計得十分巧妙,綜合了很多知識,需要處理的細節也很多
由于999911659是一個質數,利用費馬小定理
ans=G∑k|NC(N,k)mod99911658mod999911659
O(N??√)枚舉出N的所有因子,逐一算出其組合數相加
N很大,計算組合數便十分棘手,不能直接算,考慮Lucas定理
但是Lucas定理要求模為素數,999911658不滿足要求,我們將其因式分解,得到2,3,4679,35617,有很好的性質就是每個質因子都不大而且指數都為1
我們就可以分開算模每個因子的情況下的結果,最后用中國剩余定理總和到一起算出最后的結果
Lucas算組合數時可以先預處理各個模意義下的階乘和逆元階乘
最后要注意當G可能等于P,這時就是0啦。
如果直接算可能會出一個數據使得指數為0,這樣快速冪就會算出1來
轉載于:https://www.cnblogs.com/Mychael/p/8282714.html
總結
以上是生活随笔為你收集整理的BZOJ1951 [Sdoi2010]古代猪文 【费马小定理 + Lucas定理 + 中国剩余定理 + 逆元递推 + 扩展欧几里得】...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch入门之从零开始
- 下一篇: mongodb基本语句