日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

质数环问题c语言,素数环问题

發布時間:2024/9/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 质数环问题c语言,素数环问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:將從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

#include

#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

i++)

printf("%d ",

ring[i]);

printf("\n");

}

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("\nCalculating ring[%d] = ", n);

for(i=1; i

if( b[i]==0

&& isPrime((i+1)+ring[n-1]) )

{

b[i] =

1;

ring[n] =

i+1;

printf("%d ",

ring[n]);

if(

primeRing(ring, b, n+1) )

return

1;

else

b[i]

= 0;

}

return 0;

}

int isPrime(int n)

{

int i, t, f=1;

t = sqrt(n);

for(i=2; i<=t; i++)

if( n%i==0 )

{

f = 0;

break;

}

return f;

}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的质数环问题c语言,素数环问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。