素數環問題

2022-04-08 06:42:24 字數 972 閱讀 5367

素數環問題:輸入正整數n,把整數1,2,3,…,n組成乙個環,使得相鄰兩個整數之和均為素數。輸出時從整數1開始逆時針排列。n<=16;

樣例輸入:

樣例輸出:

1 4 3 2 5 6

1 6 5 2 3 4

方法一:直接列舉法

#include

#include

#include

using namespace std;

int isp[200],a[200];

int is_prime(int n)

return flag;

}int main()

if (ok)

} while (next_permutation(a + 1, a + n));

system("pause");

return 0;

}程式的基本思路是保留1的位置不變,其他數字不斷生成全排列,然後判斷該序列是否符合要求,如果符合就輸出。然而,該方法雖然比較直觀,但效率比較差,當n為12時就已經很慢了。

方法2:回溯法

程式如下:

#include

#include

#include

using namespace std;

int isp[200],a[200],vis[200];

int n;

int is_prime(int n)

return flag;

} void dfs(int cur)

else for(int i =2; i <= n;i++)

if (!vis[i] && isp[i + a[cur - 1]])

}int main()

由於前面已經畫了類似流程圖,這裡不再畫。簡單來說,每次遞迴的過程就是在乙個解答樹的分支中不斷嘗試剩下的元素,如果能符合要求,就放到素數環裡面。素數環與之前唯一不同之處在於a[0]是確定為1的,只需確定1除外的其他元素的位置。

素數環問題

問題描述 用自然數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,...