nyoj 素数环

来源:互联网 发布:gta5 n卡优化 编辑:程序博客网 时间:2024/05/29 18:47
#include <stdio.h>#include <memory.h>#define M 21int flag,visit[M],Prime[M+M],n,ans[M];void dfs(int cur){int i,j,k;if(cur==n+1){if(Prime[ans[cur-1]+1])  // 最后一个和头一个也是素数则成立 {flag=1;for(i=1;i<=n;i++){printf("%d ",ans[i]);}printf("\n");}return;}elsefor(i=2;i<=n;i++){if(!visit[i]&&Prime[i+ans[cur-1]]) //如果可以选 {                                 ans[cur]=i;  // 选visit[i]=1;   dfs(cur+1);visit[i]=0;  //不选 }}}int main(){int t,i,j,k,c;memset(Prime,1,sizeof(Prime));Prime[1]=0;for(i=2;i<=M;i++){if(!Prime[i]) continue;for(j=2;i*j<=M+M;j++){Prime[i*j]=0;//素数的倍数一定不是素数}}c=0;while(scanf("%d",&n)&&n){flag=0; c++;memset(visit,0,sizeof(visit));visit[1]=1;ans[1]=1;printf("Case %d:\n",c);if(n==1){printf("1\n");continue;}if(n%2==0)dfs(2); // n为奇数时一定有两个奇数相邻 (环形排列) if(!flag) printf("No Answer\n");}return 0;}

0 0
原创粉丝点击