C++便利实现 素数环 输出
程序员文章站
2022-06-02 11:53:18
...
题目:
分析:
从1到n(n<=16)这n个数摆成一个环,要求相邻的任意两个数的和是一个素数。输出时从整数1开始逆时针排列!所以在构建代码的时候选择不枚举全部,直接使用32以内的素数即可
Code
#include<bits/stdc++.h>
using namespace std;
set<int> prime = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37 };
void f(int *A, int n, int index) {
if (index == 1 + n) {
if (prime.find(A[1] + A[n]) != prime.end()) {
for (int i = 1; i <= n; ++i)
cout << A[i] << (i == n ? "" : " ");
cout << endl;
}
return;
}
for(int i=1;i<=n;++i)
//如果数字i没取过,且与邻近数字之和是素数
if (find(A + 1, A + index, i) == A + index && prime.find(A[index - 1] + i) != prime.end())
{
A[index] = i;
f(A, n, index + 1);
}
}
int main() {
int n, A[20];
for (int ii = 1; cin >> n; ++ii) {
cout << (ii > 1 ? "\n" : "") << "Case " << ii << endl;
iota(A, A + n + 1, 0);//为数组赋初值
f(A, n, 2);
}
return 0;
}
推荐阅读