素数环_回溯法
课本例题:
素数环是一个计算机程序问题,指的是将从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;
else
a[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;
}

浙公网安备 33010602011771号