poj 2635 The Embarrassed Cryptographer

高精度+大数同余求模,采用千进制能够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 }
View Code

 

posted @ 2013-07-15 16:18  _随心所欲_  阅读(224)  评论(0编辑  收藏  举报