素數環問題

2021-09-16 13:53:47 字數 1098 閱讀 8446

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

為了簡便起見,我們規定每個素數環都從1開始。

輸入 有多組測試資料,每組輸入乙個n(0輸出 每組第一行輸出對應的case序號,從1開始。

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

樣例輸入

683

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

思路

如果是1開頭,那麼結尾的那個數必須是偶數。

假設n是乙個奇數,n≥3

從1 到 n 排列,奇數個數=偶數個數 + 1

第一位排奇數1,最後乙個排乙個偶數。在中間的數字裡,偶數必須和兩個奇數相隔,那麼最後剩下了乙個奇數,不符合要求。因此,n≥3時,n必為偶數。

特判:n=1成立(自己和自己成環),n=2成立,n=3不成立

在此基礎上,再對一串數字進行dfs操作,即找到滿足條件的數的組合為止。

**

#include using namespace std;

int a[45]=,b[21]=,v[21]=,n;

void init()

}void dfs(int x)

for(j=2;j<=x;j++)

if(!a[b[j-1]+b[j-2] ])

return ;

if(x==n)

{if(a[b[0] +b[x-1] ])

{for(j=0; j>n)

{ if (n==0)

break;

t++;

cout<<"case "<**來自:

素數環問題

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