您现在的位置:首页 > 教案格式 > 正文

素数环_素数环c_素数环算法

2016-12-02 20:06 网络整理 教案网

素数环

问题描述:将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环

n=20时,下面的序列就是一个素数环

1 2 3 4 7 6 5 8 9 10 13 16 15 14 17 20 11 12 19 18

下面的程序利用回溯法穷举所有可能性,试图找到一个解。既然是环,第一个位置可以随意取一个数值(好象设置为1比其它数计算起来都要快,不信你把程序中的ring[0] 设置为18计算一下。另外n好象只是偶数的时候才存在素数环)。素数环这个问题应该还有很多种解法,和递归、图的 DFS搜索、哈密顿环都有关系。我的问题是,能否写出一个比较高效的算法计算出对于任意n的全部素数环序列?

#include <stdio.h>

#include <math.h>

#define LEN 20

int primeRing(int ring[], int b[], int n);

int isPrime(int n);

int main(void)

{

int i, ring[LEN]={0}, b[LEN]={0};

ring[0] = 1;

b[0] = 1;

if( primeRing(ring, b, 1) )

{

printf('\n\nThe prime ring is : ');

for(i=0; i<LEN; i++)

printf('%d ', ring[i]);

printf('\n');

素数环算法_素数环_素数环c

}

else

printf('\n\nNot found!\n');

return 0;

}

int primeRing(int ring[], int b[], int n)

{

int i;

if( n==LEN )

return isPrime(ring[n-1]+ring[0]);

printf('\nCalcula