大小 N (N≤17) 的質數環由 1~N 組成環,相鄰兩數之和為質數。第一個數固定為 1。按字典序輸出所有本質不同的環。例如 N=6 輸出:
1 4 3 2 5 6 1 6 5 2 3 4
#include <cstdio>
#include <cmath>
using namespace std;
int a[18], n, b[18]; // a:可選數, b:已放數
bool isPrime(int x) {
for (int i=2; i<=sqrt(x); i++) if (x%i==0) return false;
return true;
}
void dfs(int pos) {
if (pos == n) {
if (isPrime(b[n-1] + 1)) { // 尾首相連
for (int i=0; i
關鍵優化
- 質數表預計算避免重複開根號
- 按遞增順序嘗試可選數,天然保證字典序輸出
- N=17 時運行極快,典型 DFS 剪枝應用