Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 37703 Accepted Submission(s): 16659
Problem Description 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 6 8
Sample Output Case 1: 1 4 3 2 5 6 1 6 5 2 3 4
Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2
Source
|
1 #include2 #include 3 #include 4 using namespace std; 5 bool vis[20]; 6 int a[20]; 7 int n; 8 bool prime(int m) 9 {10 if(m==1) return false;11 if(m==2) return true;12 for(int i=2;i*i<=m;i++)13 if(m%i==0) return false;14 return true;15 }16 void dfs(int m)17 {18 if(m==n&&prime(a[m-1]+a[0])){19 for(int i=0;i >n){43 cout<<"Case "<<++j<<":"<