题目大意:给你一个数N 请你输出环数为N的素数环并且按照字典序排序
Sample Input
6
8
Sample Output
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<bits/stdc++.h>
using namespace std;
int n,vis[50],a[50],pos[50];
void dfs(int x)
{
int i;
if(x==n+1&&vis[a[1]+a[n]]==0)
{
for(i=1;i<=n;i++)
printf("%d%c",a[i],i==n?'\n':' ');
return ;
}
else
{
for(i=2;i<=n;i++)
{
if(!pos[i]&&vis[i+a[x-1]]==0)
{
pos[i]=1;
a[x]=i;
//printf("a[%d]=%d\n",x,a[x]);
dfs(x+1);
pos[i]=0;
}
}
return ;
}
}
int main()
{
for(int i=2;i*i<=50;i++)
{
if(!vis[i])
{
for(int j=i*i;j<=50;j+=i)
vis[j]=1;
}
}
int x=0;
while(scanf("%d",&n)!=EOF)
{
a[1]=1;
printf("Case %d:\n",++x);
dfs(2);
printf("\n");
}
return 0;
}