1. 程式人生 > >【openjudge】素數環

【openjudge】素數環

問題 A(2266): 【基礎演算法】素數環
時間限制: 5 Sec 記憶體限制: 128 MB
提交: 224 解決: 102
[提交][狀態][我的提交]
題目描述
輸入正整數n,把整數1,2,3,…,n組成一個環,使得相鄰兩個整數之和均為素數。小強同學看過這個題,笑了:呵呵,打表!
Mr. Wu為了阻止小強打表,決定這樣:
把全部的解按字典序排序後,從1開始編號,依次輸出指定編號的k組解。最後一行輸出總的方案數。同一個素數環只算一次。

輸入
第1行:2個整數,n(n<=18)和k(1<=k<=10)
第2行:共有k個從小到大排列的整數,表示要輸出的解的編號。

輸出
前k行,每行一組解,對應於一個輸入
第k+1行:一個整數,表示總的方案數。

樣例輸入
Copy (如果複製到控制檯無換行,可以先貼上到文字編輯器,再複製)

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組解。

[提交][狀態][討論版]

進步的天梯:


1~‘同一個素數環只算一次。’,同學們看到這個提示,一定要注意:我們面對的字元是連在一起的(注意),所以,我們在看到這樣的提示,一定要固定一個數為開頭(就像火車有火車頭),只有這樣,我們才好計算。

#include<cstdio> 
#include<cstring> 
#include<cmath> 
using namespace std; 
int n,num,k; 
int j=1; 
int a[15],sum=1; 
bool z[25]; 
int su[25]; 
bool pd(int m) //判斷素數
{ 
    for(int
i=2;i<=sqrt(m);i++) //注意要開方(死結構) if(m%i==0) return 0; return 1; } void print() //輸出 { for(int i=1;i<n;i++) printf("%d ",su[i]); printf("%d\n",su[n]); } int search(int x) { for(int i=2;i<=n;i++)//已定開頭 { if((z[i]==0)&&pd(i+su[x-1])) { z[i]=1; su[x]=i; if(x==n) { if(pd(su[n]+su[1])) { num++; if(num==a[sum]) { sum++;print(); } } } else search(x+1); z[i]=0; } } } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) scanf("%d",&a[i]); su[1]=1; //定義1為開頭 z[1]=1; search(2); printf("%d",num); } /************************************************************** Problem: 2266 User: ybxq005 Language: C++ Result: 正確 Time:3993 ms Memory:1044 kb ****************************************************************/

相關推薦

openjudge素數

問題 A(2266): 【基礎演算法】素數環 時間限制: 5 Sec 記憶體限制: 128 MB 提交: 224 解決: 102 [提交][狀態][我的提交] 題目描述 輸入正整數n,把整數1,2,3,…,n組成一個環,使得相鄰兩個整數之和均為素數

經典演算法問題素數問題

/* 素數環問題 2014-4-8 17:22:28 */ #include <stdio.h> #include <math.h> #include <string.h> bool hasSelected[21]; int sit

BZOJ4773 倍增Floyd

方法 family 包含 -s sharp 有向圖 。。 ret space 【BZOJ4773】負環 Description 在忘記考慮負環之後,黎瑟的算法又出錯了。對於邊帶權的有向圖 G = (V, E),請找出一個點數最小的環,使得 環上的邊權和為負數。保證

模板(spfa)

sizeof 貪心 com image 一行 clas 存在 cst -m 洛谷——P3385 【模板】負環 題目描述 暴力枚舉/SPFA/Bellman-ford/奇怪的貪心/超神搜索 輸入輸出格式 輸入格式: 第一行一個正整數T表

洛谷P3385 模板 DFS-SPFA 判負 圖論

string inf scan space can 清空 span %d pre 洛谷P3385 【模板】負環 圖論 今天get了 一個 DFS-SPFA 判負環的方法 一般的 BFS-SPFA 判負環 一般就是 不停地做,如果某點第 n+1次加入隊列中,那麽說明這個圖存在

openjudgeC15C Rabbit's Festival CDQ分治+並查集

amp rabbit class printf sdn 題解 {} .net log 題目鏈接:http://poj.openjudge.cn/practice/C15C/ 題意:n 點 m 邊 k 天。每條邊在某一天會消失(僅僅那一天消失)。問每一天有多少對點可以相互到達

洛谷—— P3385 模板

next i++ bre 表示 一個 ace amp 存在 algo 題目描述 暴力枚舉/SPFA/Bellman-ford/奇怪的貪心/超神搜索 輸入輸出格式 輸入格式: 第一行一個正整數T表示數據組數,對於每組數據: 第一行兩個正整數N M,表示圖有N個

poj 3385模板

ios 判斷負環 main 判斷 次數 sin 輸出格式 print front 題目描述 暴力枚舉/SPFA/Bellman-ford/奇怪的貪心/超神搜索 輸入輸出格式 輸入格式: 第一行一個正整數T表示數據組數,對於每組數據: 第一行兩個正整數N M,表示圖

Python開發

內容 循環 pri python div 所有 clas bsp pre While循環 基本循環 while 條件:   執行內容 #循環體   ... #循環體   ... #循環體 # 若條件為真,執行循環體內容 #

基礎模擬

int under 每一個 宋體 can port toc log flag 1096: 【基礎】循環數【模擬】 時間限制: 1 Sec 內存限制: 128 MB提交: 426 解決: 283[提交][狀態][討論版] 題目描述 描述 n 位的一個整數是循環數(cyc

基礎以及循控制語句

初始 返回 自增 區別 嵌套for循環 循環結構 使用方法 後置 共同點 while: /* 演示while和do...while的使用方法及區別 while (表達式){ 代碼塊 } do { 代碼塊 } while(表達式); while與

openjudge字符串+模擬1777:文件結構“圖”

不用 第一個 LG cstring \n 函數 算法分析 參數 i++ 【題目傳送門:】戳 【描述:】 在計算機上看到文件系統的結構通常很有用。Microsoft Windows上面的"explorer"程序就是這樣的一個例子。但是在有圖形界面之前,沒有圖形化的表示方法的,

p3385 模板(spfa)

最短 ack 內容 獲得 getchar() 比較 char s str reg 題目描述 毒瘤數據要求判負環 分析: 還是融合了不少題解的思想的。 負環定義: 權值和為負的環 //在網絡上並沒有找到一個官方定義,暫且這麽理解。 SPFA: 支持負邊權的情況. spfa是最

「P3385」模板(spfa

題目描述 暴力列舉/SPFA/Bellman-ford/奇怪的貪心/超神搜尋 輸入輸出格式 輸入格式:   第一行一個正整數T表示資料組數,對於每組資料: 第一行兩個正整數N M,表示圖有N個頂點,M條邊 接下來M行,每行三個整數a b w,表示a->b有一條權值為w的邊(若w&

BZOJ4773-倍增+Floyd

測試地址:負環 做法: 本題需要用到倍增+Floyd。 我們很快能想出 O (

圖論--洛谷P3385模板

這道題有毒啊。。輸出的不是“NO”是“N0”,不是“YES”而是“YE5”。被坑了一晚上。 另外,spfa-dfs竟然被卡死了,只能過9個點。換成三行就寫完的Bellmam-Ford就AC了 SPFA-

數學數論素數的線性篩法

寫在前面   記錄了個人的學習過程,同時方便複習   素數的線性篩法   有時候需要篩出來一張素數表,即1~n範圍內的所有素數   一個個列舉判斷是否為素數顯然太慢     於是經過仔細的研究之後,發現如果存在正整數k(k>2)不是素數,那麼它的因子裡面一

問題 : 函式素數的判斷 簡單 函式

題目描述 請編寫函式PrimeJudge,其功能是判斷一個整數num是否為素數,如果是素數,則返回1,否則返回0。 #include <stdio.h> //你需要提交的程式碼 int main() { int num; scanf("%d",&

數論素數

素數: 素數指的是:因子只有  1  和它本身。 素數的分佈: 素數分佈的應用 例題:素數個數的位數(nefu 117) 題目連結 素數個數的位數 Description 小明是一個聰明的孩子,對數論有著很濃烈的興趣。他發現求1到正整數10n 之間

Luogu P3385 模板

題目描述 暴力列舉/SPFA/Bellman-ford/奇怪的貪心/超神搜尋 輸入輸出格式 輸入格式: 第一行一個正整數T表示資料組數,對於每組資料: 第一行兩個正整數N M,表示圖有N個頂點,M條邊 接下來M行,每行三個整數a b w,表示a->b