素数环问题
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=105;
int n=20,vis[maxn],a[maxn],cnt;
void swap(int x,int y){
int t=a[x];
a[x]=a[y];
a[y]=t;
}
void dfs(int now){
int i;
if(now==n+1){
if(vis[a[1]+a[20]])return;
for(i=1;i<=n-1;i++){
if(vis[a[i]+a[i+1]]){
return ;
}
}
cnt++;
if(cnt==2){
for(i=1;i<=n-1;i++){
cout<<a[i]<<' ';
}
cout<<a[n]<<endl;
exit(0);
}
return ;
}
for(i=now;i<=n;i++){
swap(i,now);
if(!vis[a[now]+a[now-1]])
dfs(now+1);
swap(i,now);
}
}
int main(){
int i,j;
for(i=1;i<=n;i++)a[i]=i;
for(i=2;i<=50;i++){
for(j=2;j<=sqrt(i);j++){
if(i%j==0){
vis[i]=1;
break;
}
}
}
dfs(1);
return 0;
}