课本例题:
素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。
#include <iostream>#include <cmath>using namespace std;
int Prime(int x)
{int n = (int)sqrt(x);for (int i = 2; i <= n; i++){if (x % i == 0)return 0;}return 1;
}
int Check(int k, int n, int a[])
{for (int i = 0; i < k; i++)if (a[i] == a[k])return 0;int f = 0;f = Prime(a[k] + a[k - 1]);if (f == 1 && k == n - 1)f = Prime(a[k] + a[0]);return f;
}void PrimeCircle(int n)
{int a[n] = {0};a[0] = 1;int k = 1;while (k >= 1){a[k]++;while (a[k] <= n)if (Check(k, n, a))break;elsea[k]++;if (a[k] <= n && k == n - 1){for (auto i : a)cout << i << " ";// cout << endl;// k--; // 这里要减一,因为k++在下一轮循环中执行return; // 这里只需要一个结果,如果需要全部结果,则需要注释掉return并解注释上方两句}if (a[k] <= n && k < n - 1){k++;}else{a[k] = 0;k--;}}
}
int main()
{int n = 10;PrimeCircle(n);system("pause");return 0;
}