日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)...

發(fā)布時間:2023/12/20 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)論神題了吧算是

1951: [Sdoi2010]古代豬文
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 1573 Solved: 650
[Submit][Status][Discuss]

Description
“在那山的那邊海的那邊有一群小肥豬。他們活潑又聰明,他們調(diào)皮又靈敏。他們自由自在生活在那綠色的大草坪,他們善良勇敢相互都關(guān)心……” ——選自豬王國民歌 很久很久以前,在山的那邊海的那邊的某片風(fēng)水寶地曾經(jīng)存在過一個豬王國。豬王國地理位置偏僻,實施的是適應(yīng)當(dāng)時社會的自給自足的莊園經(jīng)濟,很少與外界聯(lián)系,商貿(mào)活動就更少了。因此也很少有其他動物知道這樣一個王國。 豬王國雖然不大,但是土地肥沃,屋舍儼然。如果一定要拿什么與之相比的話,那就只能是東晉陶淵明筆下的大家想象中的桃花源了。豬王勤政愛民,豬民安居樂業(yè),鄰里和睦相處,國家秩序井然,經(jīng)濟欣欣向榮,社會和諧穩(wěn)定。和諧的社會帶給豬民們對工作火紅的熱情和對未來的粉色的憧憬。 小豬iPig是豬王國的一個很普通的公民。小豬今年10歲了,在大肥豬學(xué)校上小學(xué)三年級。和大多數(shù)豬一樣,他不是很聰明,因此經(jīng)常遇到很多或者稀奇古怪或者旁人看來輕而易舉的事情令他大傷腦筋。小豬后來參加了全豬信息學(xué)奧林匹克競賽(Pig Olympiad in Informatics, POI),取得了不錯的名次,最終保送進入了豬王國大學(xué)(Pig Kingdom University, PKU)深造。 現(xiàn)在的小豬已經(jīng)能用計算機解決簡單的問題了,比如能用P++語言編寫程序計算出A + B的值。這個“成就”已經(jīng)成為了他津津樂道的話題。當(dāng)然,不明真相的同學(xué)們也開始對他刮目相看啦~ 小豬的故事就將從此展開,伴隨大家兩天時間,希望大家能夠喜歡小豬。 題目描述 豬王國的文明源遠流長,博大精深。 iPig在大肥豬學(xué)校圖書館中查閱資料,得知遠古時期豬文文字總個數(shù)為N。當(dāng)然,一種語言如果字?jǐn)?shù)很多,字典也相應(yīng)會很大。當(dāng)時的豬王國國王考慮到如果修一本字典,規(guī)模有可能遠遠超過康熙字典,花費的豬力、物力將難以估量。故考慮再三沒有進行這一項勞豬傷財之舉。當(dāng)然,豬王國的文字后來隨著歷史變遷逐漸進行了簡化,去掉了一些不常用的字。 iPig打算研究古時某個朝代的豬文文字。根據(jù)相關(guān)文獻記載,那個朝代流傳的豬文文字恰好為遠古時期的k分之一,其中k是N的一個正約數(shù)(可以是1和N)。不過具體是哪k分之一,以及k是多少,由于歷史過于久遠,已經(jīng)無從考證了。 iPig覺得只要符合文獻,每一種能整除N的k都是有可能的。他打算考慮到所有可能的k。顯然當(dāng)k等于某個定值時,該朝的豬文文字個數(shù)為N / k。然而從N個文字中保留下N / k個的情況也是相當(dāng)多的。iPig預(yù)計,如果所有可能的k的所有情況數(shù)加起來為P的話,那么他研究古代文字的代價將會是G的P次方。 現(xiàn)在他想知道豬王國研究古代文字的代價是多少。由于iPig覺得這個數(shù)字可能是天文數(shù)字,所以你只需要告訴他答案除以999911659的余數(shù)就可以了。

Input
有且僅有一行:兩個數(shù)N、G,用一個空格分開。

Output
有且僅有一行:一個數(shù),表示答案除以999911659的余數(shù)。

Sample Input
4 2

Sample Output
2048

HINT
10%的數(shù)據(jù)中,1 <= N <= 50;
20%的數(shù)據(jù)中,1 <= N <= 1000;
40%的數(shù)據(jù)中,1 <= N <= 100000;
100%的數(shù)據(jù)中,1 <= G <= 1000000000,1 <= N <= 1000000000。
Source
Sdoi2010 Contest2

題解:

設(shè)指數(shù)為M,模數(shù)為P 則依據(jù)費馬小定理可以進行轉(zhuǎn)化:
G^M mod P = G^(M mod (P-1) ) ( G != P)
P-1不為質(zhì),所以拆成指數(shù),最后用中國剩余定理合并即可

code:

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath>using namespace std; int pp[4]={2,3,4679,35617};int G,N,P=999911659; int jc[4][50000]; int M[4];void exgcd(int a,int b,int &x,int &y) {if (b==0) {x=1;y=0;return;}exgcd(b,a%b,x,y);int tmp=x;x=y;y=tmp-a/b*y; }int quick_pow(long long a,int b,int p) {int ans=1;for(int i=b;i;i>>=1,a=(a*a)%p)if(i&1)ans=(ans*a)%p;return ans; }void cs() {jc[1][0]=jc[2][0]=jc[3][0]=jc[0][0]=1;for (int i=0; i<4; i++)for (int j=1; j<=pp[i]; j++)jc[i][j]=(jc[i][j-1]*j)%pp[i]; } int C(int n,int m,int p) {if (n<m) return 0;return jc[p][n]*quick_pow(jc[p][m]*jc[p][n-m],pp[p]-2,pp[p])%pp[p]; } int lucas(int n,int m,int p) {if (m==0) return 1;return C(n%pp[p],m%pp[p],p)*lucas(n/pp[p],m/pp[p],p)%pp[p]; }int china() {int a1,b1,a2,b2,a,b,c,x,y;a1=pp[0],b1=M[0];for(int i=1;i<4;i++){a2=pp[i],b2=M[i];a=a1;b=a2;c=b2-b1;exgcd(a,b,x,y);x=((c*x)%b+b)%b;b1=b1+a1*x;a1=a1*b;}return b1; }int work() {G%=P;for (int i=1; i*i<=N; i++){if (N%i==0){int tmp=N/i;for (int j=0; j<4; j++){if (tmp!=i)M[j]=(M[j]+lucas(N,i,j))%pp[j];M[j]=(M[j]+lucas(N,tmp,j))%pp[j];}}}printf("%d\n",quick_pow(G,china(),P)); }int main() {cs();scanf("%d%d",&N,&G);if (G==P) {puts("0");return 0;}work();return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/5346199.html

總結(jié)

以上是生活随笔為你收集整理的BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。