c++ 素数圈
题目描述
正整数n表示有n个数,分别是正整数1~n,然后把这n个数组成一个圈,使得相邻两个整数之和均为素数。输出时,从整数1开始逆时针排列。同一个圈应恰好输出一次。n < = 16
输入
输入整数n
输出
按要求输出
样例输入
6
样例输出
1 4 3 2 5 6
1 6 5 2 3 4
Source Code
#include<bits/stdc++.h>
using namespace std;
int n,prime[40],a[40],used[40];
void dfs(int step)
{
if(step == n)
{
if(prime[a[1] + a[n]] == 1)
{
for(int i = 1;i <= n;i ++)
printf("%d ",a[i]);
cout << endl;
}
return ;
}
for(int i = 2;i <= n;i ++)
if(used[i] == 0&&prime[a[step] + i] == 1)
{
a[step + 1] = i;
used[i] = 1;
dfs(step + 1);
used[i] = 0;
}
}
int main()
{
prime[2] = prime[3] = prime[5] = prime[7] = prime[11] = prime[13] = prime[17] = prime[19] = prime[23] = prime[29] = prime[31] = 1;
cin >> n;
a[1] = 1;
dfs(1);
return 0;
}