您的位置:首页 > 其它

hdu 1016 Prime Ring Problem

2013-07-26 18:06 363 查看
#include<stdio.h>
#include<string.h>
#include<math.h>
#define Max 41
bool prime[Max];
int ans[Max];
bool flag[Max];
int n;
void Myprime()
{
int i,j;
memset(prime,true,sizeof(prime));
prime[2]=true;
for(i=2;i<sqrt(Max+0.1);i++)
{
if(prime[i])
{
for(j=2;i*j<Max;j++)
prime[i*j]=false;
}
}
//for(i=2;i<Max;i++)
//if(prime[i])
//printf("%d\n",i);
}
void Dfs(int i)
{
int j;
if(i==n&&prime[ans[0]+ans[n-1]])
{
for(j=0;j<n-1;j++)
printf("%d ",ans[j]);
printf("%d\n",ans[n-1]);
}
else
{
for(j=2;j<=n;j++)
{
if(flag[j]&&prime[j+ans[i-1]])
{
flag[j]=false;
ans[i]=j;
Dfs(i+1);
flag[j]=true;
}
else continue;
}
}
}
int main()
{
int i=1;
Myprime();
while(scanf("%d",&n)!=EOF)
{
memset(ans,0,sizeof(ans));
ans[0]=1;
memset(flag,true,sizeof(flag));
printf("Case %d:\n",i++);
Dfs(1);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: