图片很垃圾但是 也就能看看把 ~^ v ^~
#include
#include
#include
using namespace std;
const int MAXN=100;
bool isPrimeNum[MAXN];
vector ans;
bool isUsed[MAXN];
int N;
void getPrimeTable()
{
//筛选求质数-------------------------------------------打表
fill(isPrimeNum,isPrimeNum+MAXN,true);//先假设都是素数
isPrimeNum[0]=isPrimeNum[1]=false;
for(int i=2;i<MAXN;i++)
{
//2开始 2是最小的质数
if(isPrimeNum[i])
{
//把i的倍数全部设置为非素数
for(int j=2*i;j<MAXN;j+=i)
{
isPrimeNum[j]=false;
}
}
}
}
void DFS(int index)
{
int temp;
if(index>=N)--------------------------------------出口
{
temp=ans[0]+ans[index-1];//判断第一个数和最后一个数相加是否是指数
if(isPrimeNum[temp]==false) return;
for(int x: ans)
{
cout<<x;
}
cout<<endl;
return;
}
for(int i=2;i<=N;i++)
{
if(isUsed[i]) continue;
int temp=ans[index-1]+i;
if(isPrimeNum[temp]==false)-------------------------------剪枝
{
continue;//剪枝
}
ans.push_back(i);
isUsed[i]=true;
DFS(index+1);
isUsed[i]=false;---------------------------回溯
}
}
int main()
{
getPrimeTable();
N=4;
ans.push_back(1);---------先将1放入vector数组
DFS(1);
return 0;
}