水题 上代码
#include<stdio.h>
int n;
int s[21];
int vis[21];
int isprime(int n)
{
int count=0;
for(int i=2;i<=n-1;i++)
if(n%i!=0) count++;
if(count==n-2)
return 1;
return 0;
}
void dfs(int j)
{
if(j==n&&isprime(s[n-1]+1))
{
for(int i=0;i<n;i++) {
if(i==0) printf("1");
else printf(" %d",s[i]);}
printf("\n");
}
for(int i=2;i<=n;i++)
{
if(isprime(s[j-1]+i)&&vis[i]==0)
{
s[j]=i;
vis[i]=1;
dfs(j+1);
vis[i]=0;//回溯框架;
}
}
}
int main()
{
int count=0;
while(scanf("%d",&n)!=EOF)
{
printf("Case %d:\n",++count);
s[0]=1;
dfs(1);
printf("\n");
}
return 0;
}