#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[40];
bool st[40];
bool isprime(ll x){
//试除法判断是否为素数
for(int i=2;i*i<=x;i++)
if(x%i==0) return false;
return true;
}
void dfs(int x,int num){
//出口
if(x==n+1){
if(isprime(a[1]+a[n])){
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
//直接结束
exit(0);
}
else
return;
}
//按照一定方向遍历所有的数字,将没填过并且和是素数的填进去
for(int i=1;i<=n;i++)
{
if(st[i]==0 && isprime(i+num) ){ //判断出合法的方案并执行
a[x]=i;//第x个盒子填入数字i
st[i]=1;//标记i用过了,给x之后的盒子看
dfs(x+1,i);//橡皮筋向一个方向拉伸
st[i]=0;//当回到第x个盒子,意味着当前盒子将要填i+1了,所以要将i还原
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
a[1]=i;//第一个盒子直接填i
st[i]=1;
dfs(2,i);//深搜从第2个盒子开始填,并且告知前一个盒子数
st[i]=0;
}
return 0;
}
2110:【例5.1】素数环
最新推荐文章于 2025-03-28 23:10:59 发布