这道题主要用到了一个筛法求素数,大数的模运算,以及暴力搜索的方法.....题意比较简单,关键要注意到大数的模运算问题!
// source code of submission 784711, Zhongshan University Online Judge System #include <iostream> #include <string> #include <malloc.h> using namespace std; int prime(int a[],int n) //筛法求n以内的素数 { int i,j,k,x,num,*b; n++; n/=2; b=(int *)malloc(sizeof(int)*(n+1)*2); a[0]=2;a[1]=3;num=2; for(i=1;i<=2*n;i++) b[i]=0; for(i=3;i<=n;i+=3) for(j=0;j<2;j++) { x=2*(i+j)-1; while(b[x]==0) { a[num++]=x; for(k=x;k<=2*n;k+=x) b[k]=1; } } return num; } bool is_mod(string s,int n) //运用大数的模运算来判断是否能整除(本题的亮点) { int ans = 0; for(int i = 0;i < s.size();i++) ans = (int) (((long)ans*10 + (s[i]-'0')) % n); if(ans == 0) return 1; else return 0; } int main() { int k,l,i,res,ok; int p[100010]; string s; int num = prime(p,1000000); while(cin>>s>>l,(s[0]!='0'||l)) { ok = 1; for(i = 0;i<num;i++) if(p[i]<l&&is_mod(s,p[i])) { res = p[i]; ok = 0; break;} if(!ok) cout<<"BAD"<<" "<<res<<endl; else cout<<"GOOD"<<endl; } return 0; }