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;
}
原文地址:https://www.cnblogs.com/LJA001162/p/11339821.html