#include #include using namespace std; vector> result; bool prime(int x){ if(x <= 1) return false; for(int i = 2; i * i <= x; i++){ if(x % i == 0) return false; } return true; } bool checkPrime(int n, vector& x) { if (x.size() < 2) return true; // 少于2个,不用检查 int tmp = x[x.size() - 1] + x[x.size() - 2]; if (!prime(tmp)) return false; if (x.size() == n) { if (!prime(x.back() + x[0])) return false; } return true; } void dfs(int n, vector& _path, vector& _used){ if(!checkPrime(n, _path)) return; if(_path.size() == n){ result.push_back(_path); return; } for(int i = 0; i < n; i++){ if(!_used[i]){ _used[i] = true; _path.push_back(i + 1); dfs(n, _path, _used); _used[i] = false; _path.pop_back(); } } } int main(){ int n; cin >> n; vector used(n, false); vector path; dfs(n, path, used); for(auto x : result){ for(auto y : x){ cout << y << " "; } cout << endl; } cout << endl; system("pause"); return 0; }