Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
数据都过了,还有什么bug呀#include<cstdio> #include<algorithm> using namespace std; const int M=100000; int prime[10000],p0[10000],t[10000],b[10000]; int gcd(int a,int b) { if(b==0)return a; return gcd(b,a%b); } int modn(int a,int b0,int c) { int ans=1; while(b0) { if(b0&1)ans=(__int64)ans*a%c; a=(__int64)a*a%c; b0>>=1; } if(ans==1) return 1; else return 0; } int main() { int i,j,k,m,n,Euler,ans; int q,p,two,T=1,s; char ch; prime[1]=2; prime[2]=3; k=2; for(i=5;i<=M;i+=2) { for(j=1;prime[j]*prime[j]<=i;j++) { if(i%prime[j]==0)goto loop; } k++;prime[k]=i; loop:; } prime[0]=k; while(scanf("%d%c%d",&p,&ch,&q)!=EOF) {two=0; if(p==0){printf("Case #%d: %d,%d\n",T++,1,1);continue;} p=p/gcd(p,q);q=q/gcd(p,q); while(q%2==0){two++;q/=2;} if(q==1){printf("Case #%d: %d,%d\n",T++,two+1,1);continue;} k=0; n=m=q; for(i=1;i<=prime[0];i++) { s=0; while(n%prime[i]==0){s++;n/=prime[i];} if(s>0){k++;p0[k]=prime[i];t[k]=s;} if(n==1)break; if(n/prime[i]<prime[i]){k++;p0[k]=n;t[k]=1;break;} } Euler=m; for(i=1;i<=k;i++) Euler=(Euler/p0[i]*(p0[i]-1)); n=Euler; k=0; for(i=1;i*i<=n;i++)//计算n所有的因子 {if(n%i==0) { k++;b[k]=i; if(b[k]!=n/i){k++;b[k]=n/i;} } } sort(b+1,b+k+1); for(i=1;i<=k;i++) if(modn(2,b[i],q)){ans=b[i];break;} printf("Case #%d: %d,%d\n",T++,two+1,ans); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator