欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++便利实现 素数环 输出

程序员文章站 2022-06-02 11:53:18
...

题目:

C++便利实现 素数环 输出

分析:

从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;
}