#include <iostream>
#include<math.h>
#include<string.h>
#include<vector>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
vector<int> dp;
int Prime[40];
int isvisit[21];//显示数是否已访问
int A[21];//保存输入数的顺序
int n;
void dfs(int step);//step剩余的数
int main(int argc, char** argv)
{
memset(Prime,0,sizeof(Prime));
Prime[0]=1;
Prime[1]=1;
for(int i=2;i<8;i++)
{
if(Prime[i]==0)
{
for(int j=i;i*j<40;j++)
{
Prime[i*j]=1;
}
}
}
int i=0;
A[1]=1;
while(cin>>n)
{
memset(isvisit,0,sizeof(isvisit));
cout<<"case "<<++i<<":"<<endl;
dfs(2);
}
return 0;
}
void dfs(int step)//step剩余的数
{
if(step==n+1&&!Prime[A[n]+A[1]])
{
for(int i=1;i<=n;i++)
{
cout<<A[i]<<" ";
}
cout<<endl;
return;
}
for(int i=2;i<=n;i++)
{
if(!isvisit[i]&&!Prime[i+A[step-1]])
{
A[step]=i;
isvisit[i]=1;
dfs(step+1);
isvisit[i]=0;//回溯
}
}
}
代码有错,不能通过hdu