HDOJ 1016(DFS)
#include<stdio.h>
#include<math.h>
int prime(int n)
{
int i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int str[21];
int n;
int i,totle=0;
int shuzi[21];
int prime1[38]={0};
void dfs(int num)
{
int i;
if(num==n&&prime1[1+shuzi[n]])
{
for(i=1;i<=n;i++)
printf("%d%c",shuzi[i],(i<n?' ':'n'));
return;
}
else
{
for(i=2;i<=n;i++)
{
if(!str[i]&&prime1[shuzi[num]+i])
{
shuzi[num+1]=i;
str[i]=1;
dfs(num+1);
str[i]=0;
}
}
}
}
int main()
{
for(i=2;i<38;i++)
{
if(prime(i))
prime1[i]=1;
else
prime1[i]=0;
}
prime1[0]=prime1[1]=0;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<21;i++)
str[i]=0;
totle++;
printf("Case %d:n",totle);
shuzi[1]=1;
//str[1]=1;
dfs(1);
printf("n");
}
return 0;
}