高精度+大数同余求模,采用千进制能够AC……
链接http://poj.org/problem?id=2635
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<vector> 5 #include<cmath> 6 #include<iomanip> 7 #include<string> 8 using namespace std; 9 char a[10000]; 10 int b[10000],prime[1000101],m; 11 bool f[1000105]; 12 void init() 13 { 14 __int64 i,j; 15 m=0; 16 memset(f,0,sizeof(f)); 17 for(i=2;i<=1000100;i++) 18 { 19 if(f[i]==0) 20 { 21 prime[m++]=i; 22 for(j=i*i;j<=1000100;j+=i) 23 f[j]=1; 24 } 25 } 26 } 27 int main() 28 { 29 init(); 30 int l,len,i,j,k,t; 31 while(cin>>a>>l&&l) 32 { 33 len=strlen(a); 34 i=len/3; 35 j=len-1; 36 k=0; 37 while(i>0) 38 { 39 b[k++]=((a[j-2]-'0')*10+a[j-1]-'0')*10+a[j]-'0'; 40 j-=3; 41 i--; 42 } 43 if(len%3) 44 { 45 t=len%3; 46 if(t==1) 47 b[k++]=a[0]-'0'; 48 else b[k++]=(a[0]-'0')*10+a[1]-'0'; 49 } 50 for(i=0;prime[i]<l;i++) 51 { 52 t=0; 53 for(j=k-1;j>=0;j--) 54 { 55 t=(t*1000+b[j])%prime[i]; 56 } 57 if(t==0) 58 break; 59 } 60 if(prime[i]>=l) 61 cout<<"GOOD"<<endl; 62 else cout<<"BAD "<<prime[i]<<endl; 63 } 64 return 0; 65 }