您的位置:首页 > 其它

[USACO 1.5.3]特殊的质数肋骨

2013-05-10 14:36 323 查看
#include<stdio.h>
#include<string.h>
#include<math.h>
int m;
int a[4]={2,3,5,7};
int b[4]={1,3,7,9};
int c[10];
int number;
bool visit[101000];
int prime[100000];
int n=100000;
int init_prim()
{
memset(visit,true,sizeof(visit));
int num=0;
for(int i=2;i<=n;i++)
{
if(visit[i]==true)
{
num++;
prime[num]=i;
}
for(int j=1;(j<=num)&&(i*prime[j]<=n);j++)
{
visit[i*prime[j]]=false;
if(i%prime[j]==0)break;
}
}
return 0;
}

int num(int k)
{
number = 0;
for(int i=0;i<=k;i++)
{
number=number*10+c[i];
}
for(int i=2;i<sqrt(number+0.5);i++)
if(number%prime[i]==0)return 0;
return 1;
}
int pri(int k)
{
if(k==m)
{
for(int i=0;i<m;i++)
printf("%d",c[i]);
printf("\n");
}
else if(k==0)
{
for(int i=0;i<4;i++)
{
c[k]=a[i];
pri(k+1);
}
}
else
{
for(int i=0;i<4;i++)
{
c[k]=b[i];
if(!num(k))continue;
pri(k+1);
}
}
return 0;

}
int main()
{
init_prim();
while(scanf("%d",&m)!=EOF)
{
memset(c,0,sizeof(c));
pri(0);
}
return 0;
}


http://www.acmore.net/problem.php?id=1075
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: