素数环问题描述:
问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。注:第1个位置恒为1
#include<stdio.h>
#include<math.h>
int n;//环内元素个数
int p[10];//p[i]表示第i个位置的元素
//p[1]=1;//第1个位置恒为1
int hash[10]={0};//hash[i]表示i是否被访问
int isprime(int n)//判断n是否为素数
{
if(n<=1)
return 0;
int sqr=sqrt(1.0*n);
for(int i=2;i<=sqr;++i)
if(n%i==0)//不是素数
return 0;
return 1;
}
int check(int index,int x)//检查第index个位置放置数x是否满足条件
{
if(index==n)//最后一个位置
{
if(isprime(x+1)==1&&isprime(x+p[index-1])==1)//满足条件
return 1;
else
return 0;
}
if(isprime(x+p[index-1])==1)//满足条件
return 1;
else
return 0;
}
void g(int index)//处理第index个位置
{
if(index==n+1)
{
for(int i=1;i<=n;++i)
printf("%d ",p[i]);
printf("\n");
}
for(int x=2;x<=n;++x)
{
if(hash[x]==0)//x未被访问
{
if(check(index,x)==1)//满足条件
{
hash[x]=1;//数x已被访问
p[index]=x;//第index个位置放置了数x
g(index+1);//处理第index+1个位置
hash[x]=0;
}
}
}
}
int main()
{
scanf("%d",&n);
p[1]=1;
g(2);
return 0;
}
素数环问题(回溯)
猜你喜欢
转载自blog.csdn.net/qq_32631105/article/details/88743415
今日推荐
周排行