#include<iostream>
#include<algorithm>
using namespace std;
int lsp[40] = { 0 };//素数比对表
//下标 2 3 4 5 6 7
// 0 1 0 1 0 1
int A[20] = { 0 };//排序
int coun[20] = { 0 };//记数,以下标的方式记录,是否重复出现
int n = 0;
size_t is_prime(int m)//判断是否为素数
{
for (int i = 2; i < m; i++)
{
if (m % i == 0)
{
return 0;
}
}
if (m == 2)
{
return 0;
}
return 1;
}
void dfs(int out)//递归
{
if (out == n && lsp[A[0] + A[n - 1]])//结束条件
{
for (int i = 0; i < n; i++)
{
cout << A[i] << " ";
}
cout << endl;
}
else
{
for (int i = 2; i <= n; i++)
{
if (!coun[i] && lsp[i + A[out - 1]])//i是填入排序中的数字
{
A[out] = i;
coun[i] = 1;
dfs(out + 1);
//递归回归时,排序归零,方便继续递归
A[out] = 0;
coun[i] = 0;
}
}
}
}
int main()
{
cin >> n;
for (int i = 2; i <= 2 * n; i++)
{
lsp[i] = is_prime(i);
}
A[0] = 1;//题目要求,以1开头循环
dfs(1);
return 0;
}
最好画图理解