題意:輸入一個數n,把1到n的自然數放到一個環裏,保證相鄰的兩個數的和是素數。(1和n
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
using namespace std;
int a[25],b[45]= {0},n;
int isprime[40]= {0,1,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0};//素數打表
void dfs(int k)
{
if(k==n+1&&isprime[a[n]+a[1]])
{
for(int i=1; i<n; i++)
cout<<a[i]<<" ";
cout<<a[n]<<endl;
return ;
}
for(int i=2; i<=n; i++)
{
if(!b[i]&&isprime[i+a[k-1]])
{
a[k]=i;
b[i]=1;
dfs(k+1);
b[i]=0;
}
}
}
int main()
{
int casen=0;
while(cin>>n)
{
printf("Case %d:\n",++casen);
a[1]=1;
dfs(2);
printf("\n");
memset(a,0,sizeof(a));
}
return 0;
}