Uva524—素数环

来源:互联网 发布:洛阳市青峰网络 编辑:程序博客网 时间:2024/06/04 20:06

输入正整数n,把1—n组成一个环,是相邻的两个整数为素数。输出时从整数1开始,逆时针排列。

同一个环恰好输出一次。n≤16

样例输入:

6

样例输出:

1 4 3 2 5 6

1 6 5 2 3 4


#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int maxn = 1000;int isp[maxn], visit[maxn], A[maxn], n;// 判断素数函数 int is_prime(int x) {for (int i = 2; i*i <= x; i++) {if (x%i == 0) return 0;}return 1;}// 递归求解 void dfs(int cur) {if (cur == n && isp[A[n-1]+A[0]]) {for (int i = 0; i < n; i++) printf("%d ", A[i]);printf("\n");}// 递归求解 for (int i = 2; i <= n; i++) {if (!visit[i] && isp[i+A[cur-1]]) {A[cur] = i;visit[i] = 1;dfs(cur+1);visit[i] = 0;     // 切记需还原 }}}// 主函数 int main() {memset(visit, 0, sizeof(visit));cin >> n;for (int i=2; i < n*2; i++) isp[i] = is_prime(i);   // 建立素数集 A[0] = 1;dfs(1);return 0;}


0 0
原创粉丝点击