这题考察了素数打表,大数求模。
刚开始TLE了,不能理解,后来突然发现can_mod函数string参数忘记传引用了,当然会超时了。。
有个小优化
if(res>100000000)
res = res%t;
可以减少模运算次数。
不然还是会TLE。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <math.h>
using namespace std;
#define L 1001000
string k;
int l;
int prime[L];
int num = 0;
void init_prime(){
prime[num++] = 2;
for(int i=3;i<L;i+=2){
int t = (int)sqrt((double)i);
bool flag = true;
for(int j=0;prime[j]<=t;++j){
if(i%prime[j]==0){
flag = false;
break;
}
}
if(flag)
prime[num++] = i;
}
}
bool can_mod(string &s, int t){
int res = 0;
for(int i=0;i<s.length();++i){
res = res*10+s[i]-'0';
if(res>100000000)
res = res%t;
}
return res%t == 0;
}
void process(){
int t=0;
while(t<num && prime[t]<l){
if(can_mod(k,prime[t])){
cout<<"BAD "<<prime[t]<<endl;
return;
}
++t;
}
cout<<"GOOD"<<endl;
}
int main(){
init_prime();
while(true){
cin>>k>>l;
if(k=="0" && l==0)
break;
process();
}
return 0;
}