package com.raylew.algorithm.book1; /* 素数环 n个数字(1,2,3...n)围成一个圈,要求相邻的两个数字之和是质数。 题目要求根据给出的n,计算所有能够组成满足条件的圈的数字序列。 */ public class 素数环 { public static int N = 6; public static int total = 0; public static int[] arr = new int[N]; public static boolean[] primeArr = new boolean[2 * N + 1]; public static void main(String[] args) { for (int i = 2; i <= 2 * N; i++) { int j; for (j = 2; j < i; j++) { if (i % j == 0) { break; } } if (j == i) { primeArr[i] = true; } } dfs(0); System.out.println(total); } public static void dfs(int cur) { if (cur == N) { int i; for (i = 0; i < N; i++) { if (!primeArr[arr[i] + arr[(i + 1) % N]]) { break; } } if (i == N) { for (int j = 0; j < N; j++) { System.out.print(arr[j] + " "); } System.out.println(); total++; } return; } for (int i = 1; i <= N; i++) { arr[cur] = i; int j; for (j = 0; j < cur; j++) { if (arr[cur] == arr[j]) { break; } } if (j == cur) { dfs(cur + 1); } } } }