素数环C++代码(回溯法)


这个算法是生成1~N的素数环,相邻数字之间史蒂文和必须为素数。注意保证首位之间的和也应该是素数。

#include<iostream>
#include<cmath>
#define size 101
int a[size]={0};
int n;
int tot=0;
int visited[size]={0};
using namespace std;
int is_su(int i){
int d=1;
for(int j=2;j*j<=i;j++){//判断i是否为素数,注意,在算法中,j*j的计算比求平方速度更加快,不信的话可以自己试试
if(i%j==0) {
d=0;
break;
}
}
return d;
}
void dfs(int cur){
a[0]=1;//必须设定这个的初值,不然最后的结果会有问题
if(cur==n&&is_su(a[0]+a[n-1])){
tot++;
cout<<1<<" ";
for(int i=1;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
cout<<"---------------";
cout<<endl;
}
else
for(int i=2;i<=n;i++){//此处必须从数字2开始,不然也会出现问题
if(!visited[i]&&is_su(i+a[cur-1])){
visited[i]=1;
a[cur]=i;
dfs(cur+1);
visited[i]=0;
}

}
}
int main(){
cin>>n;
dfs(1);
cout<<tot;
system("pause");
return 0;
}

希望能帮到你们


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM