poj2635 The Embarrassed Cryptographer
阿新 • • 發佈:2018-12-13
#include<iostream> #include<stdio.h> #include<string.h> #include<cstring> #include<algorithm> #include<math.h> #define ll long long #define maxn 1000100 using namespace std; int s[110];/// 儲存十萬進位制的陣列 char INPUT[110]; int n,yes;/// n為輸入的第二個數 yes判斷一下是否為GOOD int prime[maxn]={0}; int prime_linear[maxn];/// 下標連續的素數陣列 int main(){ //freopen("input2.txt","r",stdin); prime[2]=1; for(int i=3;i<maxn;++i){ prime[i]=1; if(i%2==0)prime[i]=0; } int t=sqrt(maxn*1.0); for(int i=2;i<=t;++i){ if(prime[i]){ for(int j=2*i;j<maxn;j+=i){ prime[j]=0; } } } int pos=0; for(int i=2;i<maxn;++i){ if(prime[i]){ prime_linear[pos++]=i; } } while(scanf("%s%d",INPUT,&n)){ memset(s,0,sizeof(s)); yes=1; if(INPUT[0]=='0'&&n==0)break; int len=strlen(INPUT); int pos; for(int i=0;i<len;++i){/// 將普通的數字字串轉化為10萬陣列 pos=(len-1-i)/5; s[pos]=(s[pos]*10+INPUT[i]-'0'); } for(int i=0;prime_linear[i]<n;++i){ ll ans=0; for(int j=(len-1)/5;j>=0;--j){ ans=((ans*100000+s[j])%prime_linear[i]); } if(ans==0){ printf("BAD %d\n",prime_linear[i]); yes=0; break; } } if(yes)printf("GOOD\n"); } return 0; }