#include<stdio.h>
#include<cstring>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int dp[100];
int isp(int n)
{
if(n<=1)
return 0;
int i;
for(i=2; i*i<=n; i++)
{
if(n%i==0)
break;
}
if(i*i>n)
return 1;
return 0;
}
int n;
int vis[30];
int a[30];
void dfs(int x)
{
if(x==n+1)
{
printf("%d",a[1]);
for(int i=2; i<=n; i++)
printf(" %d",a[i]);
printf("\n");
}
else
{
for(int i=2; i<=n; i++)
{
if(x==n)
{
if(vis[i]==0&&isp(a[x-1]+i)==1&&isp(1+i)==1)
{
vis[i]=1;
a[x]=i;
dfs(x+1);
vis[i]=0;
}
}
else if(vis[i]==0&&isp(a[x-1]+i)==1)
{
vis[i]=1;
a[x]=i;
dfs(x+1);
vis[i]=0;
}
}
}
}
int main()
{
int t=1;
while(~scanf("%d",&n))
{
memset(vis,0,sizeof(vis));
memset(a,0,sizeof(a));
printf("Case %d:\n",t++);
a[1]=1;
vis[1]=1;
dfs(2);
printf("\n");
}
}
HDU 1016 素數環 簡單深搜
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.