素数环
题目链接 : 点这里
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int b[22];
int vis[22];//判断是否访问
int res[22];//存放素数
int n;//总数
int prime[100];
int flag = 0;
void dabiaoprime()
{
for(int i = 2;i<100;i++)
{
if(!prime[i])
{
for(int j = 2 * i;j<100;j+=i)
prime[j] = 1;
}
}
}
void dfs(int l,int num)//sum 代表 当前选的个数
{
if(num == n)
{
if(!prime[ 1 + l])
{
flag = 1;
printf("%d",res[0]);
for(int i = 1;i<n;i++)
printf(" %d",res[i]);
printf("\n");
}
return ;
}
for(int i =2;i<=n;i++)
{
if(!vis[i] && !prime[l + i])
{
vis[i] = 1;
res[num] = i;
dfs(i,num + 1);
vis[i] = 0;
}
}
}
int main()
{
dabiaoprime();
int cnt = 1;
while(~scanf("%d",&n) && n)
{
flag = 0;
res[0] = 1;
printf("Case %d:\n",cnt++);
if(n==1)
{
printf("1\n");
continue;
}
if(n % 2==0)//进行剪枝 如果是奇数个数 一定不能醉成一个素数环
dfs(1,1);
if(!flag) printf("No Answer\n");
}
return 0;
}