素数环

输入正整数n,把整数1,2,3,……,n组成一个环,使得相邻的两个整数之和均为素数,输出时从整数1开始逆时针排序。同一个环应该恰好输出一次。n<=16.

输入

一个数n

输出

不确定行数,每行都为一种不相同的素数环的可能

样例输入

6

样例输出

1 4 3 2 5 6
1 6 5 2 3 4

woc好难啊

#include <bits/stdc++.h>
using namespace std;
int n,a[1001];
bool v[1001];
bool panduan(int x)
{
if(x<2) return 0;
int t=sqrt(x);
for(int i=2;i<=t;i++)
{
if(x%i==0) return false;
}
return true;
}
void dfs(int now)//和k一样
{
if(now==n+1)
{
if(panduan(a[1]+a[n])==true)
{
for(int i=1;i<=n;i++)
{
cout << a[i] << ' ';
}
}
cout << "\n";
return;
}
for(int i=2;i<=n;i++)
{
if(v[i]==false&&panduan(a[now-1]+i)==true)
{
v[i]=true;
a[now]=i;
dfs(now+1);
v[i]=false;
a[now]=0;
}
}
}
int main()
{
cin >> n;
for(int i=1;i<=n;i++)
{
a[i]=i;
}
dfs(2);
return 0;
}
posted @   Momo·Trace  阅读(85)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起