标签:

6 8
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2
#include<stdio.h>
#include<string.h>
int vis[30],a[30];
int IsPrime(int x)//素数判定
{
for(int i=2;i*i<=x;++i)
{
if(x%i==0) return 0;
}
return 1;
}
void DFS(int n,int c)
{
if(c==n)//当找到完n个相邻的素数之后
{
if(IsPrime(a[n]+1))//判断首位是否满足相加为素数
{
printf("1");
for(int i=2;i<=n;++i)
printf(" %d",a[i]);
printf("\n");
}
return ;
}
for(int i=2;i<=n;++i)
{
if(!vis[i]&&IsPrime(a[c]+i))//一个一个找,找到i后把i赋给a[c],c为现在找到的个数
{
a[c+1]=i;
vis[i]=1;
DFS(n,c+1);
vis[i]=0;
}
}
}
int main()
{
int n,num=0;
while(~scanf("%d",&n))
{
//printf("%d ",IsPrime(n));
memset(vis,0,sizeof(vis));
printf("Case %d:\n",++num);
vis[1]=1;
a[1]=1;
DFS(n,1);
printf("\n");
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/yuzhiwei1995/article/details/47273369