#include<iostream>
#include<cmath>
using namespace std;
//判断素数函数
bool isPrime(int nu){
for(int i=2;i<=sqrt(nu);i++)
if(nu%i==0) return false;
return true;
}
int n;
//遍历回溯函数,回溯剪枝
void scan(int lo,int* num){
for(int i=lo;i<n;i++){
if(isPrime(num[i]+num[lo-1])){
int tem=num[i];
for(int j=i;j>lo;j--)
num[j]=num[j-1];
num[lo]=tem;
//测试:监测剪枝过程详情
//cout<<lo+1<<' '<<num[lo]<<endl;
if(lo==n-1){
if(isPrime(num[lo]+num[0])){
for(int i=0;i<n;i++)
cout<<num[i]<<' ';
cout<<endl;
}
return;//到层尾时退回根层
}
//是素数时树向下展开
scan(lo+1,num);
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余1页未读,立即下载