素数环
题目:http://acm.hdu.莫名奇妙的Wrong Answer 不知道什么原因
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int prime[40];
int visit[30];
void filtration()
{
int i,j,flag;
for(i=2;i<=40;i++)
{
flag=1;
for(j=2;j<=sqrt(i);j++)
if(i%j==0)
flag=0;
if(flag==1)
prime[i]=1;
}
}
void print(int number[],int n)
{
int i;
for(i=0;i<n;i++)
{
if(i!=n-1)
printf("%d ",number[i]);
else
printf("%d",number[i]);
}
printf("\n");
//system("pause");
}
int dfs(int n,int number[],int cur)
{
int i;
if(cur==n&&prime[number[cur-1]+1]==1)
print(number,n);
if(cur>=n) return 0;
for(i=2;i<=n;i++)
if(visit[i]==0&&prime[i+number[cur-1]]==1)
{
number[cur]=i;
visit[i]=1;
dfs(n,number,cur+1);
visit[i]=0;
}
return 0;
}
int main()
{
int n,t=1;
int number[30];
filtration();
while(scanf("%d",&n)!=EOF)
{
memset(number,0,sizeof(number));
memset(visit,0,sizeof(visit));
number[0]=1;
printf("Case %d:\n",t++);
dfs(n,number,1);
}
//system("pause");
return 0;
}