【题意】输入n,输出从1-n能组成的素数环
#include<iostream>
#include<cstring>
#include<vector>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
#define maxi 0x3f3f3f3f
int prime[100];
bool mark[100];
bool markans[100];
int primesize;
int ans[100];
int n;
void findprime()
{
for(int i=2;i<100;i++)
{
if(mark[i])continue;
prime[primesize++]=i;
for(int j=i*i;j<100;j+=i)
{
mark[j]=true;
}
}
}
void print()
{
if(!mark[1+ans[n]])
{
for(int i=1;i<=n;i++)
cout<<ans[i]<<" ";
cout<<endl;
}
}
void dfs(int depth)
{
if(depth==n)
print();
for(int i=1;i<=n;i++)
{
if((!markans[i])&&(!mark[ans[depth]+i]))
{
ans[depth+1]=i;
markans[i]=true;
dfs(depth+1);
markans[i]=false;
}
}
}
int main(int argc, char const *argv[])
{
memset(mark,false,sizeof(mark));
memset(markans,false,sizeof(markans));
findprime();
cin>>n;
ans[1]=1;
markans[1]=true;
dfs(1);
return 0;
}