素數環(深搜 C 版)

2021-08-24 23:40:04 字數 1673 閱讀 4434

素數環

總時間限制: 1000ms 記憶體限制: 65536kb

描述

輸入正整數n,把整數1,2,3,…,n組成乙個環,使得相鄰兩個整數之和均為素數。小強同學看過這個題,笑了:呵呵,打表!

mr. wu為了阻止小強打表,決定這樣:

把全部的解按字典序排序後,從1開始編號,依次輸出指定編號的k組解。最後一行輸出總的方案數。同乙個素數環只算一次。

輸入

第1行:2個整數,n(n<=18)和k(1<=k<=10)

第2行:共有k個從小到大排列的整數,表示要輸出的解的編號。

輸出

前k行,每行一組解,對應於乙個輸入

第k+1行:乙個整數,表示總的方案數。

樣例輸入

10 4

1 2 5 8

樣例輸出

1 2 3 4 7 6 5 8 9 10

1 2 3 4 7 10 9 8 5 6

1 2 3 8 5 6 7 10 9 4

1 2 3 10 9 8 5 6 7 4

96

提示

輸入樣例說明:

對1,2,…,10組成素數環。要輸出字典序的第1,2,5,8等4組解

輸出樣例說明:

第1,2,5,8組解分別是樣例中所列的4行。總共有96組解。

思路點拔:典型深搜,先寫乙個判斷質數的函式,搜尋是,判斷沒相鄰兩個數的和是否為素數,由於本題是乙個環,所以再判斷一下

#include

#include

int b[23],ans,m,n,tot,c[23],a[23]=,t=1;

bool zs(int x,int y) //判斷質數

return1;}

void print() //輸出函式

void dfs(int k) //搜尋

}b[i]=0;//回溯}}

}int main()

細心的讀者會發現,上面的**看上去萬無一失,但會超時,因為在dfs中反

復的呼叫zs函式,時間複雜度會很高,所以關於質數,需要用另外一種方

式處理——由於本題中n小於等於18,所以所有數都不可能大於35,所以

用乙個陣列,若這個元素的下標為素數,如a[2],a[3],a[7]等就賦為1,否則

就賦為0,注意:本題必須用格式輸入輸出,因為這個方法是本題唯一的

正解,它的執行時間本來就臨近超時,(700<=t<1000),如果用流輸入

輸出,同樣會超時,廢話不多說,上**!

#include

#include

int b[23],ans,m,n,tot,c[23],a[23]=,t=1;

int zs[35]=;

void print() //輸出函式

void dfs(int k) //搜尋

}b[i]=0;//回溯}}

}int main()

思路很簡單,但有很多坑,需要多加注意哦~

素數環 (深搜)

描述 有乙個整數n,把從1到n的數字無重複的排列成環,且使每相鄰兩個數 包括首尾 的和都為素數,稱為素數環。為了簡便起見,我們規定每個素數環都從1開始。例如,下圖就是6的乙個素數環。輸入 有多組測試資料,每組輸入乙個n 0輸出 每組第一行輸出對應的case序號,從1開始。如果存在滿足題意敘述的素數環...

nyoj 488 素數環(深搜)

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

深搜 質數環

題目描述 description 乙個大小為n n 17 的質數環是由1到n共n個自然數組成的乙個數環,數環上每兩個相鄰的數字之和為質數。如下圖是乙個大小為6的質數環。為了方便描述,規定數環上的第乙個數字總是1。如下圖可用1 4 3 2 5 6來描述。若兩個質數環,數字排列順序相同則視為本質相同。現...