素數環問題

2022-09-11 02:36:12 字數 1304 閱讀 6261

一、題目描述:

把整數填到乙個環中,要求每個整數只填寫一次,並且相鄰的兩個整數之和是乙個素數。例如,下圖所示就是對應的乙個素數環。

二、解題思路:

​ 這個素數環有20個位置,每個位置可以填寫一次,並且相鄰為1~20,共20種可能,可以對每個位置從1開始進行試探,約束條件是正在試探的數滿足如下條件:

​ (1)與已經填寫到素數環中的整數不重複;

​ (2)與前面相鄰的整數之和是乙個素數;

​ (3)最後乙個填寫到素數環中的整數與第乙個填寫的整數之和是乙個素數。

​ 在填寫第k個位置時,如果滿足上述約束條件,則繼續填寫第k+1個位置;如果1~20都無法填寫到第k個位置,則取消第k個位置的填寫,回溯到第k-1個位置。

三、偽**:

四、流程圖:

五、源程式:

#include#includeusing namespace std;

bool isprime(int x) //判斷整數x是否是素數

bool islegal(int k, int n, int a) //判斷位置k填寫是否滿足約束條件

if(a[k]<=n && k==n-1) //求解完畢,輸出素數環

{ for(int i=0; i六、演算法分析:

1、空間複雜度分析

​ 空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。針對本題目所設計的程式在執行過程中,需要儲存素數環的空間和其它的一些臨時變數,臨時變數可忽略,所以,只需要考慮乙個大小為n的陣列。由此分析出,本演算法的空間複雜度為o(n)。

2、時間複雜度分析

​ 時間複雜度是同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。對於本題目,設要填寫1~n共n個整數,由於每個位置可以填寫的情況有n種,因此,素數環問題的解空間數是一棵完全n叉樹,且樹的深度為n+1,由此可分析出,最壞情況下的時間效能為o(n^n)。

素數環問題

問題描述 用自然數1到20構成乙個素數環,環中的每個元素與其相鄰元素的和都構成素數。請程式設計實現並輸出這個環 這裡採用了遞迴策略,可以輸出所有情況,不過存在重複輸出問題,重複輸出數為n,環是沒有次序的 現在沒有想到好的解決方法。若自然數個數確定為20 則構環的數目相當大,程式執行時間也高得驚人。測...

素數環問題

素數環 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 有乙個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數 包括首尾 的和都為素數,稱為素數環。為了簡便起見,我們規定每個素數環都從1開始。例如,下圖就是6的乙個素數環。輸入 有多組測試資料,每組輸入乙個n 0 n...

素數環問題

把從1到20這20個數擺成乙個環,要求相鄰的兩個數的和是乙個素數。c include include include using namespace std 列印結果 void printsolution const vector v cout bool check1 const vector v,...