您的位置:首页 > 其它

素数环问题

2016-12-27 20:16 405 查看
素数环问题

  素数环是一个计算机程序问题,指的是将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。

  现在要求输入一个n,求n个数围成一圈有多少种素数环,规定第一个数字是1。

样例输入

6

8

样例输出

1 4 3 2 5 6
1 6 5 2 3 4

1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2

解:

素数环问题:
如果 n 是奇数一定不可能 
第一个数字为1已经确定,所以从第二个数字开始
要求找出所有的情况
利用全排列思想或者每个位置进行假定(此处是根据每个位置进行),找出所有可能的排列并对其进行判断
相邻的两个数相加为素数,因要求找出素数环所以还需要进行首位的相应判断

#include<stdio.h>
#include <math.h>
int a[100];
int b[100];//当前数字是否被用过
int n;
bool perm(int m){
for(int s=2;s<=sqrt(m);s++){
if(m%s==0){
return false;
}
}
return true;
}
void dfs(int t){
int i;
if(t==n && perm(a[0]+a[n-1]) && a[n-1]!=0){
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");
return;
}
else for(i=2;i<=n;i++){
if(b[i-1]==0)
{
a[t]=i;
b[i-1]=1;
if(perm(a[t]+a[t-1]))
dfs(t+1);
b[i-1]=0;
}
}

}
int main(){
int i;
scanf("%d",&n);
if(n%2==1){
printf("no anther\n");
return 0;
}
for(i=0;i<n;i++){
a[i]=0;
b[i]=0;
}
a[0]=1;
b[0]=1;
dfs(1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息