Browse Source

素数环

爱玲姐姐 5 years ago
parent
commit
91192b9b4f
1 changed files with 62 additions and 0 deletions
  1. 62 0
      D.cpp

+ 62 - 0
D.cpp

@@ -0,0 +1,62 @@
+#include <bits/stdc++.h>
+ 
+using namespace std;
+int visit[41];
+int prime[41];
+int n;
+int a[21];
+int b[21];
+int cut = 0;
+int flag = 0;
+ 
+void Prime() {
+    //初始化都是素数
+    for (int i = 2; i <= 40; i++) {
+        if (!visit[i]) {
+            prime[++prime[0]] = i;      //纪录素数, 这个prime[0] 相当于 cnt,用来计数
+        }
+        for (int j = 1; j <= prime[0] && i * prime[j] <= 40; j++) {
+            visit[i * prime[j]] = 1;
+            if (i % prime[j] == 0) {
+                break;
+            }
+        }
+    }
+}
+ 
+void dfs(int k) {
+    if (cut == 1) {
+        return;
+    }
+    if (k == n + 1 && visit[a[1] + a[n]] == 0) {
+        for (int i = 1; i <= n; i++) {
+            cout << a[i] << " ";
+        }
+        cout << endl;
+        cut++;
+    } else {
+        for (int i = 1; i <= n; i++)   //***逐个尝试
+        {
+            if (b[i] == 0 && visit[i + a[k - 1]] == 0)  //***i没用过且满足条件
+            {
+                a[k] = i;    //***存储当前序列
+                b[i] = 1;    //****标记
+                dfs(k + 1);   //***递归
+                b[i] = 0;    //***去除标记
+            }
+        }
+    }
+}
+ 
+int main() {
+    Prime();
+    memset(a, 0, sizeof(a[0]));
+    memset(b, 0, sizeof(b[0]));
+    cin >> n;
+    dfs(1);
+    if (cut == 0) {
+        cout << "no solution" << endl;
+    }
+    return 0;
+}
+