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 |
哪里来的bg?In Reply To:按照报告写的还WA,why???? Posted by:ecjtubaowp at 2007-10-06 17:58:44 > #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 b,int c) > { > int ans=1; > while(b) > { > if(b&1)ans=(ans*a)%c; > a=(a*a)%c; > b>>=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; > p=p/gcd(p,q);q=q/gcd(p,q); > > while(q%2==0){two++;q/=2;} > > 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,b+k+1); > for(i=1;i<=k;i++) > printf("%d\n",b[i]); > 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