素數環問題

2021-07-01 20:13:35 字數 1183 閱讀 4043

素數環

時間限制:1000 ms | 記憶體限制:65535 kb

難度:2

描述 有乙個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數(包括首尾)的和都為素數,稱為素數環。

為了簡便起見,我們規定每個素數環都從1開始。例如,下圖就是6的乙個素數環。

輸入 有多組測試資料,每組輸入乙個n(0 < n< 20),n=0表示輸入結束。

輸出 每組第一行輸出對應的case序號,從1開始。

如果存在滿足題意敘述的素數環,從小到大輸出。

否則輸出no answer。

樣例輸入

6 8

3 0

樣例輸出

case 1:

1 4 3 2 5 6

1 6 5 2 3 4

case 2:

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

case 3:

no answer

思路:這是乙個於排列的問題,只不過是求滿足條件的排列。使用回溯法

(深度優先搜尋、dfs、depth-first-search中簡單的一種)解決。

需要注意的是,排列問題中有一種解法是先給出整個陣列a[20]的值,然後通過交換當前位置和之後各個位置的數來實現搜尋,這種方法也能得到所有的排列,但是不能滿足從小到大「字典序」的要求。

#include

#include

int a[19]=;

int sign[19]=;

int num=0;//找到的數量

int n;//n

int prem[40]=;//素數記錄表

int isprem(int a)

void search(int m)

printf("%d",a[n-1]);

printf("\n");

}}else}}

}int isodd(int a)

int main()

int no=1;

while (scanf("%d",&n)!=eof)

else}}

scanf(" ");

return

0;}

素數環問題

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

素數環問題

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

素數環問題

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述把1到20這重新排列,使得排列後的序列a滿足 a.任意相鄰兩個數之和是素數 b.不存在滿足條件a的序列b使得 a和b的前k 0 k 19 項相同且b的第k 1項比a的第k 1項小。輸入沒有輸入。輸出 輸出a,兩個數字之間用乙個空...