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.
Note: the number of first circle should always be 1.
![](https://i-blog.csdnimg.cn/blog_migrate/427b1dd2282412709d583cc17eda983e.gif)
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.
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
import java.util.Scanner;
public class Main
{
static int n;
static int arr[] = new int[16];
static boolean vis[] = new boolean[16]; //记录是否使用该数字
static int N=0;
static boolean falg = true;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNextInt()){
n = cin.nextInt();
N++;
arr = new int[16];
for (int i = 2; i <= n; i++) {
vis[i] = true; //设置为每一个数都未使用过
}
arr[0] = 1;
falg = true;
DFS(1);
System.out.println();
}
}
private static void DFS(int cur) {
if(cur==n && judge(arr[0]+arr[cur-1])){
if(falg){
System.out.println("Case "+N+":");
falg = false;
}
for (int i = 0; i < n-1; i++) {
System.out.print(arr[i]+" ");
}
System.out.print(arr[n-1]);
System.out.println();
}else{
for (int i = 2; i <= n; i++) {
if(vis[i] && judge(arr[cur-1]+i)){ //判断此时的数是否被使用了 并且判断该数字相加是否为素数
//System.out.println(" cur"+cur+ " "+i);
arr[cur] = i;
vis[i] = false; //标记此时这个数已经被使用
DFS(cur+1);
vis[i] = true; //取消标记 供下一种情况使用
}
}
}
}
//判断此时相加的数是否为素数
private static boolean judge(int num) {
int i;
for (i = 2; i <=num; i++) {
if(num%i==0) break;
}
if(i>=num){
return true;
}else{
return false;
}
}
}