#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[20],biao[20],isprime[45]={0};
int n;
void get_prime()//因为n的范围是0~20,所以两数相加最大是39,当是素数是,isprime[i]=0,反之,isprime[i]=1
{
int i,j;
for( i=2;i<8;i++)
if(!isprime[i])
for(j=i*i;j<45;j+=i)
isprime[j]=1;
}
void dfs(int step)
{
int i;
if(step==n+1&&!isprime[a[n]+a[1]])
{
for(i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
return ;
}
for(i=2;i<=n;i++)
{
if(!biao[i]&&!isprime[i+a[step-1]])//!这个地方改成==0也可以
{
biao[i]=1;
a[step]=i;
dfs(step+1);
biao[i]=0;
}
}
}
int main()
{
int k=1;
a[1]=1;
get_prime();
while(~scanf("%d",&n))
{
memset(biao,0,sizeof(biao));
printf("case %d:\n",k++);
dfs(2);
printf("\n");
}
return 0;
}
dfs素数串
最新推荐文章于 2025-02-03 23:01:55 发布
813

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



