首页 > 代码库 > C++ P1186 素数环
C++ P1186 素数环
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int N,num[20],p[20],cir[20];
bool is_prime(int x)
{
if(x<2) return false;
int m=(int)sqrt(x+0.5);
for(int i=2;i<=m;i++) if(x%i==0) return false;
return true;
}
void get_circle(int x)
{
if(x>N)//填满一圈 ;
{
if(is_prime(cir[N]+cir[1]))//检查环的两头,满足就输出一个环;
{
for(int i=1;i<=N;i++) printf("%d ",cir[i]);
printf("\n");
}
return;
}
if(x==1)//满足由1开头输出一个素数环的要求;
{
cir[1]=1;p[1]++;
get_circle(x+1);
p[1]--;
return;
}
for(int i=1;i<=N;i++)
{
if(x>1&&p[i]<num[i]&&is_prime(cir[x-1]+i))
{
cir[x]=i;p[i]++;
get_circle(x+1);
p[i]--;
}
}
}
int main()
{
scanf("%d",&N);
for(int i=1;i<=N;i++) num[i]=1;
get_circle(1);
return 0;
}
C++ P1186 素数环