锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍋氭硶錛?br>璁綰p[i][j]琛ㄧず闀垮害涓篿浠寮澶寸殑zig搴忓垪
Down[i][j]琛ㄧず闀垮害涓篿浠寮澶寸殑zag搴忓垪
鐩存帴閫掓帹
2 int Up[2][4205],Down[2][4205],N,P;
3 int main()
4 {
5 scanf("%d%d",&N,&P);
6 Up[1][1]=Down[1][1]=1;
7 for (int i=2,now=0;i<=N;++i,now^=1)
8 {
9 Up[now][i+1]=Down[now][0]=0;
10 for (int j=i;j;--j)
11 Up[now][j]=(Up[now][j+1]+Down[now^1][j])%P;
12 for (int j=1;j<=i;++j)
13 Down[now][j]=(Down[now][j-1]+Up[now^1][j-1])%P;
14 }
15 int ret=0;
16 for (int i=1;i<=N;++i)
17 ret=(ret+Up[N&1][i])%P;
18 printf("%d\n",(ret<<1)%P);
19 return 0;
20 }
21
]]>
鍋氭硶錛?br>鍏堝皢y琛ㄧず鎴?y=(x*z)/(x-z)
鐒跺悗鍛?..鎴戝氨涓嶇煡閬撶劧鍚庝簡
baidu浜嗛瑙e悗鎵嶇煡閬撲簡
璁緒=x-z 鍒檟=z+w 閭d箞 y=(z*z+w*z)/w=z*z/w+z
鎵浠ヨ漿鍖栦負浜嗘眰z*z/w鐨勬暣鏁拌В涓暟
鍗硓*z鐨勭害鏁頒釜鏁?nbsp; 鍥犱負瑕佹眰涓瀵圭殑 鎵浠ョ瓟妗堟槸 (綰︽暟涓暟+1)/2
鐒跺悗灝辮В鍐充簡銆?br>
2 #define n 50005
3 int p[n],T,N,ret;
4 bool mk[n];
5 inline void mkprime()
6 {
7 for (int i=2;i<n;++i)
8 if (!mk[i])
9 for (int j=i<<1;j<n;j+=i)
10 mk[j]=1;
11 for (int i=2;i<n;++i)
12 if (!mk[i]) p[++p[0]]=i;
13 }
14 inline int getlog(int &N,int prime)
15 {
16 int ret=0;
17 for (;N%prime==0;N/=prime,++ret);
18 return ret;
19 }
20 int main()
21 {
22 mkprime();
23 scanf("%d",&T);
24 for (int Te=1;Te<=T;++Te)
25 {
26 scanf("%d",&N);
27 ret=1;
28 for (int i=1;i<=p[0]&&p[i]*p[i]<=N;++i)
29 if (N%p[i]==0) ret*=(getlog(N,p[i])<<1)+1;
30 if (N>1) ret*=3;
31 printf("Scenario #%d:\n%d\n\n",Te,(ret+1)>>1);
32 }
33 return 0;
34 }
35
]]>
鍋氭硶錛?br>棣栧厛鍙互鑲畾鐨勬槸 緇欎綘N 璁╀綘姹傚嚭N鐨勬墍鏈夌害鏁頒箣鍜岀殑鍋氭硶
渚挎槸鍒嗚В璐ㄥ洜鏁板茍灝哊琛ㄧず鎴?p1^k1*p2^k2.....pm^km 鐒跺悗灝嗚繖浜涙暟瀛楀垎涓簃綾?br>鐢ㄥ叕寮?1+p1+p1^2...+p1^k1)(1+p2+p2^2...+p2^k2)...(1+pm+pm^2+...+pm^km)渚垮彲浠ヨ綆楀緱鍒?br>鍥犱負浠庢瘡綾諱腑閫変竴縐峱i^j涔樺嚭鏉?絳変環浜庡皢pi^j涔樺埌榪欎釜綰︽暟涓紝鎵鏈夌殑涔樻硶鍙兘涔嬪拰渚挎槸綰︽暟鍜?br>瀵逛簬N^M 鍏跺疄鏈川涓鏍?p1^(M*k1)*p2^(M*k2).....pm^(M*km)
闂杞寲涓轟簡濡備綍姹?+q+q^2+...+q^Q榪欎釜絳夋瘮鏁板垪鍓峃欏瑰拰
楂樹腑鏁板鍛婅瘔鎴戜滑鍙互鐢?q^Q-1)/(q-1)榪欎釜鍏紡蹇熷箓瑙e喅
紱繪暎鏁板鍛婅瘔鎴戜滑鍙互鐢ㄦ瀯閫犵煩闃電敤鐭╅樀涔樻硶
鐢ㄥ叕寮?澶ч儴鍒嗘儏鍐甸兘鏄鐨?
浣嗘槸鍦ㄦ瘮濡?(q^Q-1)涓?q-1)閮借兘琚?9901鏁撮櫎鐨勬儏鍐典笅姹傚嚭鏉ョ殑鑲畾鏄? 涓嶆槸姝g‘瑙?br>錛堟垜姣旇緝鎰氭槯 涓嶇煡閬撳浣曡В鍐?姹傝В鍐蟲柟娉曪級
鐢ㄧ煩闃?nbsp; 鍏跺疄涔熷緢綆鍗?nbsp; 鏋勯犱竴涓?*2鐨勭煩闃靛嵆鍙?br>鎴戝氨鍙璁叉垜鐨勫ぇ甯告暟sb鏂規硶
A鏄瓟妗堢煩闃?br>A11 琛ㄧずi嬈″箓鐨勬椂鍊欏綋鍓嶈繖涓暟 A12琛ㄧずi嬈″箓鐨勬椂鍊欏綋鍓嶈繖涓暟鍔犱笂涔嬪墠鐨勫拰 涔熷氨鏄墠i欏瑰拰
B鏄敤鏉ヨ漿縐葷殑鐭╅樀
B11 = B12 = Num B21=0 B22=1
鍒濆 A11=A12=1 A21=A22=0
瑕佹眰 N^M嬈$殑鏃跺欏彧瑕佹妸 B 閲嶆柊鏋勯?鎶夾涔樹笂B鐨凪嬈?灝卞彲浠ヤ簡
榪欐牱灝辮В鍐充簡姝ら 铏界劧甯告暟涓嶅拫鍦般傘?br>
2 #include <cstring>
3
4 #define P 9901
5 #define n 3
6 int p[P],C[n][n],Mat[n][n],tmp[n][n],N,M,ret;
7 bool mk[P];
8 inline void mkprime()
9 {
10 for (int i=2;i<P;++i)
11 if (!mk[i])
12 for (int j=i<<1;j<P;j+=i)
13 mk[j]=1;
14 for (int i=2;i<P;++i)
15 if (!mk[i]) p[++p[0]]=i;
16 }
17 inline void matmul(int A[][n],int B[][n])
18 {
19 memset(C,0,sizeof(C));
20 for (int i=1;i<3;++i)
21 for (int j=1;j<3;++j)
22 for (int k=1;k<3;++k)
23 C[i][j]=(C[i][j]+A[i][k]*(long long)B[k][j])%P;
24 memcpy(A,C,sizeof(C));
25 }
26 inline int getlog(int &N,int prime)
27 {
28 int ret=0;
29 for (;N%prime==0;N/=prime,++ret);
30 return ret;
31 }
32 inline void Mult(int prime,int log)
33 {
34 Mat[1][1]=Mat[1][2]=1;
35 tmp[1][1]=tmp[1][2]=prime;
36 tmp[2][1]=0,tmp[2][2]=1;
37 for (;log;log>>=1,matmul(tmp,tmp))
38 if (log&1) matmul(Mat,tmp);
39 ret=(ret*Mat[1][2])%P;
40 }
41 int main()
42 {
43 mkprime();
44 scanf("%d%d",&N,&M);
45 ret=1;
46 for (int i=1,j;i<=p[0]&&p[i]*p[i]<=N;++i)
47 if (N%p[i]==0) Mult(p[i],getlog(N,p[i])*M);
48 if (N>1) Mult(N,M);
49 printf("%d\n",ret);
50 return 0;
51 }
52
]]>
鍙堟槸鏁拌棰樸傘傛垜澶彍浜?鎯充簡寰堜箙
鍋氭硶錛?br>鐩存帴姹備笉浼?br>鍙兘鑰冭檻 瀵逛簬gcd(M,N)=i 鏈塁i涓狹婊¤凍姝ゅ紡 絳旀渚挎槸鈭?Ci*i)
gcd(M,N)=i <=> gcd(M/i,N/i)=1
鑰屾眰gcd(M/i,N/i)=1 鏈夊灝戜釜M/i婊¤凍 榪欎究鏄鎷夊嚱鏁癙hi()鐨勫畾涔?br>鎵浠ュ氨杞寲涓轟簡姹侾hi(N/i)
鏋氫婦姣忎釜 M|N 姹傚嚭Phi(N/i) 絳旀渚挎槸 鈭?Phi(N/i)*i)
閭d箞濡備綍鏋氫婦姣忎釜 M|N 鍛紵
寰堢畝鍗?鏋氫婦1鍒皊qrt(N)鐨勬墍鏈夋暣鏁幫紝鎵鏈夌殑綰︽暟渚挎槸 j|N (N/j)|N
榪欐牱灝辨悶瀹氫簡
2 #include <cmath>
3 #define n 50005
4 int p[n],N;
5 bool mk[n];
6 inline void mkprime()
7 {
8 for (int i=2;i<n;++i)
9 if (!mk[i])
10 for (int j=i<<1;j<n;j+=i)
11 mk[j]=1;
12 for (int i=2;i<n;++i)
13 if (!mk[i]) p[++p[0]]=i;
14 }
15 inline int Phi(int u)
16 {
17 int phi=u;
18 for (int i=1;i<=p[0]&&p[i]*p[i]<=u;++i)
19 if (u%p[i]==0)
20 {
21 phi=phi/p[i]*(p[i]-1);
22 for (;u%p[i]==0;u/=p[i]);
23 }
24 if (u>1) phi=phi/u*(u-1);
25 return phi;
26 }
27 int main()
28 {
29 mkprime();
30 for (;scanf("%d",&N)!=EOF;)
31 {
32 long long ret=0;
33 for (int i=1,up=(int)sqrt((double)N);i<=up;++i)
34 if (N%i==0)
35 {
36 ret+=(N/i)*(long long)Phi(i);
37 if (i*i!=N) ret+=i*(long long)Phi(N/i);
38 }
39 printf("%I64d\n",ret);
40 }
41 return 0;
42 }
43
]]>
鍋氭硶錛?br>
鏁拌棰?.瀵逛簬姣旀垜澶х殑鍚屽鑲畾瑙夊緱寰堢畝鍗曘傘?br>鐢辨鎷夊畾鐞?A^phi(P) == 1 (mod P) (phi(prime)=prime-1)
寰楀埌 A^(B+phi(P)) == c (mod P) A^(B-Phi(P)) ==c (mod P)
鎵浠ュ彲浠ヨ偗瀹氱殑涓鐐規槸 濡傛灉 [0,phi(P))鍐呮棤瑙?鐢辨寮忓瓙鐨勫懆鏈熸у繀鐒朵笉浼氭湁鏇村瑙?br>
涓涓湸绱犵殑鎯蟲硶錛氭灇涓?B∈[0,phi(P)) 媯楠?A^B鏄惁 == C(mod P)
闂鍙堝嚭鐜頒簡 P鏄釜璐ㄦ暟 phi(P)=P-1 蹇呯劧TLE
鎵浠ュ氨蹇呴』鐢ㄧ┖闂存崲鏃墮棿銆?br>
璁懼緱鍒扮殑絳旀鏄疊 B=X*sqrt(P)+Y 娉ㄦ剰鍒癤,Y<=sqrt(P)
鍒楀紡騫跺寲綆錛?br>
A^(X*sqrt(P)+Y) == C (mod P)
(A*sqrt(P))^X*A^Y == C (mod P)
璁?T=A*sqrt(P) 鍘熷紡鍗?T^X*A^Y == C (mod P)
涓よ竟鍚岄櫎浠?A^Y 寰楀埌 T^X == C/(A^Y) (mod P)
濂藉惂 鍒扮幇鍦?鍋氭硶灝卞凡緇忔誕鍑烘按闈簡
鎴戜滑棰勫鐞員^i (mod P) 鏈澶歴qrt(P)涓?(i<X)
鎵嬪啓hash鎴栬呯敤map鐩存帴瀛樹笅鏉ヤ簩鍏冪粍 (T^X (mod P),X)
鐒跺悗鏋氫婦 Y∈[0,sqrt(P)) 鏈澶歴qrt(P)涓?br>瀵逛簬姣忎釜Y 鎴戜滑姹傚嚭 C/(A^Y) (mod P) 鐒跺悗鍦╤ash鎴栬卪ap涓煡鎵捐繖涓?br>濡傛灉 (C/(A^Y) (mod P),X) 瀛樺湪 閭d箞璇存槑 X*sqrt(P)+Y 鏄彲浠ヤ綔涓虹瓟妗堢殑
鏈鍚庣瓟妗堜究鏄墍鏈夋弧瓚蟲潯浠剁殑 X*sqrt(P)+Y 涓殑鏈灝忓箋?br>
濡傛灉浣犱笉鐭ラ亾 C/(A^Y) (mod P) 鎬庝箞姹?br>閭e氨緇х畫鐪嬩笅鍘誨惂
C/(A^Y) (mod P) == C*((1/A^Y) mod P)
(1/A^Y) (mod P) == (A^Y)^-1 (mod P)
鍗?(A^Y)^(phi(P)-1) (mod P)
鎵浠?C/(A^Y) (mod P) 灝辯瓑浜嶤*(A^Y)^(phi(P)-1) (mod P)
榪欐牱灝辮В鍐充簡姝ら銆?br>
2 #include <cstring>
3 #include <cmath>
4 #define Prime 899037
5 #define oo 2000000005
6 #define min(a,b) ((a)<(b)?(a):(b))
7 int P,B,N;
8 int H[Prime],V[Prime];
9 inline int pow(int u,int v)
10 {
11 int ret=1;
12 for (int tmp=u;v;v>>=1,tmp=(tmp*(long long)tmp)%P)
13 if (v&1) ret=(ret*(long long)tmp)%P;
14 return ret;
15 }
16 inline void Hpush(int u,int v)
17 {
18 int t=u%Prime;
19 for (;H[t];)
20 {
21 if (H[t]==u) return;
22 if (++t==P) t-=P;
23 }
24 H[t]=u,V[t]=v;
25 }
26 inline int Hpop(int u)
27 {
28 int t=u%Prime;
29 for (;H[t];)
30 {
31 if (H[t]==u) return V[t];
32 if (++t==P) t-=P;
33 }
34 return oo;
35 }
36 int main()
37 {
38 for (;scanf("%d%d%d",&P,&B,&N)!=EOF;)
39 {
40 int ret=oo+1;
41 memset(H,0,sizeof(H));
42 memset(V,-1,sizeof(V));
43 int sqrtP=(int)sqrt((double)P),Bsp=pow(B,sqrtP);
44 for (int i=0,val=1;i<=sqrtP;++i,val=(val*(long long)Bsp)%P)
45 Hpush(val,i);
46 for (int i=0,val=1;i<=sqrtP;++i,val=(val*(long long)B)%P)
47 {
48 int h=(N*(long long)pow(val,P-2))%P,v=Hpop(h);
49 if (v<oo&&v*sqrtP+i<ret) ret=v*sqrtP+i;
50 }
51 if (ret>oo) puts("no solution");
52 else printf("%d\n",ret);
53 }
54 return 0;
55 }
56
]]>