满意答案
meelaurel
2013.09.10
采纳率:57% 等级:13
已帮助:17531人
#include
#include
int is_prime(int x)
{
int i,flag;
for(i=2;i<=x/2;i++)
if(x%i==0)
return 0;
return 1;
}
void dfs(int n,int *a,int *isp,int *vis,int cur)
{
if(cur==n&&isp[a[0]+a[n-1]])
{
for(int i=0;i
printf("%d ",a[i]);
printf("\n");
return ;
}
else
for(int i=1;i<=n;i++)
if(!vis[i]&&isp[i+a[cur-1]])//如果i没有用过,并且与前一个数之和为素数
{
a[cur]=i;
vis[i]=1;
dfs(n,a,isp,vis,cur+1);
vis[i]=0;
}
}
int main()
{ int i,n,a[100],isp[100],vis[100];
memset(vis,0,sizeof(vis));
memset(isp,0,sizeof(isp));
scanf("%d",&n);
for(i=0;i
a[i]=i+1;
for(i=1;i<100;i++)
isp[i]=is_prime(i);
dfs(n,a,isp,vis,0);
return 0;
}
判断素数有问题
21分享举报