Prime Ring Problem(判断素数的几种方法)

来源:互联网 发布:淘宝怎么代理充话费 编辑:程序博客网 时间:2024/06/05 03:02

判断素数的几种方法请参考这篇文章:

点击打开链接http://blog.csdn.net/qq_21120027/article/details/51107918

A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. 

Note: the number of first circle should always be 1. 

 
Input
n (0 < n < 20). 
Output
The output format is shown as sample below. Each row represents a series of circle numbers in the ring beginning from 1 clockwisely and anticlockwisely. The order of numbers must satisfy the above requirements. Print solutions in lexicographical order. 

You are to write a program that completes above process. 

Print a blank line after each case. 
Sample Input
68
Sample Output
Case 1:1 4 3 2 5 61 6 5 2 3 4Case 2:1 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2

#include<cstdio>#include<string.h>void isPrime(int a);void dfs(int cur);void show();bool prime[45];bool book[25];int an[25];int n;int main(){int cnt;cnt=0;while(scanf("%d",&n)!=EOF){memset(prime,true,sizeof(prime));memset(book,true,sizeof(book));memset(an,0,sizeof(an));an[0]=1;isPrime(2*n);printf("Case %d:\n",++cnt);dfs(1);putchar('\n');}return 0;}void isPrime(int a){int i,j;for(i=2;i<a;i++){for(j=i*i;j<a;j+=i)prime[j]=false;}}void dfs(int cur){if(cur==n){if(prime[1+an[n-1]])show();return ;}for(int j=2;j<=n;j++){if(book[j]&&prime[an[cur-1]+j]){an[cur]=j;book[j]=false;dfs(cur+1);book[j]=true;}}}void show(){int i;for(i=0;i<n-1;i++)printf("%d ",an[i]);printf("%d\n",an[n-1]);}