题目链接:http://poj.org/problem?id=2635
可借鉴链接:http://blog.csdn.net/lyy289065406/article/details/6648530
源代码:
using namespace std;
int a[100005];
int flag[1001000]={0,0,0};
int b[500];
int i,j,k,t;
int main()
{
//筛选法求素数
for( i=2;i<=1050;i++)
{
if(flag[i]) continue;
for( j=i+i;j<=1000100;j+=i)
{
flag[j]=1;
}
}
int q=0;
for( i=2;i<=1000100;i++)
if(flag[i]==0)
{
a[q++]=i;
}
//筛选法求素数
char str[10005];
int kw;
int sum;
int pq;
while(scanf("%s%d",str,&kw)&&kw!=0)
{
pq=0;
for( i=0;str[i]!='\0';i++) ;
int mid2;
int mid3;
int s=-1;
for( j=i-1;j>=0;)
{
s++;
mid2=0;
mid3=1;
while(s%4!=3&&j>=0) //s用来控制b数组存的位数
{
mid2+=(str[j]-48)*mid3 ;//倒序放入b数组的
mid3*=10;
s++;
j--;
}
//cout<<mid2<<" mid2 " <<endl;//可以检验下
b[pq++]=mid2;
}
int mid;
for( t=0;t<q;t++)
{
mid=0;
if(a[t]>=kw) //大于等于kw的时候跳出
{
printf("GOOD\n");
break;
}
for(k=pq-1;k>=0;k--)
{
mid=(mid*1000+b[k])%a[t];//这样三位三位的,可以提高运算效率,如果一位一位的会超时
}
//cout<<mid<<" Mid"<<endl;
if(mid==0)
{
printf("BAD %d\n",a[t]);
break;
}
}
}
}