这个题都卡了,真是好久不做题不行啊。
#include <stdio.h>
#include <string.h>
const int N = 21;
int a[N];
int vis[N];
int n;
int cnt = 1;
bool isprime(int x)
{
if(x == 2)
return true;
for(int i = 2; i*i <= x; i++)
{
if(x%i == 0)
return false;
}
return true;
}
void DFS(int x)
{
if(x == n+1)
{
if(isprime(a[1]+a[n]))
{
for(int i = 1; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
}
else
return ;
}
for(int i = 2; i<=n; i++)
{
if(!vis[i] && isprime(i + a[x-1]))
{
a[x] = i;
vis[i] = 1;
DFS(x+1);
vis[i] = 0;
}
}
}
int main()
{
a[1] = 1;
while(~scanf("%d",&n)&&n)
{
memset(vis,0,sizeof(vis));
printf("Case %d:\n",cnt++);
if(n == 1)
printf("1\n");
else if(n&1)
printf("No Answer\n");
else
DFS(2);
}
return 0;
}