#include<stdio.h> //注意两位的数 例如 14 35
#include<string.h>
#define N 1000006
char str[10000];
int prim[N];
void prime()
{
int i,j;
memset(prim,0,sizeof(prim));
for(i=2;i*i<=N;i++)
{
if(!prim[i])
for(j=2*i;j<N;j+=i)
prim[j]=1;
}
return;
}
int main()
{
int len,i,flag,sum,j;
prime();
/*for(i=2;i<1000006;i++)
if(!prim[i])
printf("%d ",i);
*/
int p,x,m;
while(scanf("%s %d",&str,&p)!=EOF)
{
len=strlen(str);
if(str[0]=='0' && len==1 && p==0)
break;
if(len%3==1)
m=str[0]-'0';
else if(len%3==2)
m=10*(str[0]-'0')+str[1]-'0';
else
m=0;
x=len%3;
flag=0;
for(j=2;j<N;j++)
{
if(!prim[j] && !flag)
{
sum=m;
for(i=x;i<len && !flag;i+=3)
{
sum=(1000*sum+100*(str[i]-'0')+10*(str[i+1]-'0')+str[i+2]-'0')%j;
}
if(len<3)
sum=sum%j;
if(sum==0)
{
flag=j;
}
}
}
if(flag && flag<p)//
printf("BAD %d\n",flag);
else
printf("GOOD\n");
}
return 0;
}
本文介绍了一种使用C语言实现的高效素数筛选方法,并基于此方法解决了一个具体的问题:判断给定字符串形式的大整数是否能被特定素数整除。通过预先计算并存储一定范围内的所有素数,然后利用这些素数对输入的数字进行快速判断。

被折叠的 条评论
为什么被折叠?



