問題描述
若乙個世紀的100年號中不存在乙個素數,則稱這個世紀為合數世紀。求第n個合數世紀(公元0年起始)。
輸入描述
輸入n,為整數
輸出描述
輸出合數世紀起始與結束年份,用空格隔開
樣例輸入
樣例輸出1671800 1671899這道題是一道遍歷題,遍歷0-99,沒有合數世紀就累加100,訣竅在於如何讓**的效率更好。
我首先想到的是,用for迴圈對0到99進行素數判斷,只要有乙個素數就認為這個世紀不行,判斷素數我用的**如下
1int judge(intn)2
8return1;
9 }
於是問題出現了,判斷素數的**上面這個已經是我能想到的效率最快的乙個了,但還是不行,時間複雜度約為為o(n/2),隨著n越大,迴圈次數越多,時間用得也越多,也就導致了,第乙個合數世紀超過三秒還是判斷不出來,我們以1秒的標準要求自己。
查了一下資料,我發現了乙個時間複雜度更低的演算法。
我原先是打算判斷是不是素數,而我現在我打算判斷是不是合數,**如下
1int judge(intn)2
8return0;
9 }
很巧妙的乙個判斷是否是合數,時間複雜度為最大為o(n^0.5
),遠遠小於o(n/2)。
於是,我用這個演算法打造了乙個程式,如下
1 #include 2using
namespace
std;34
int judgecompos(int n) //
在n~n+99之內進行素數累加516
}17}18
if(count==50) return1;
19else
return0;
20}2122
intmain()
2332
if(n==begin)
3337}38
return0;
39 }
題解 星系探索
題目傳送門 給出乙個 n 個點的樹,每個點有點權,有 m 次操作,分別為以下操作 n le 100000,m le 300000 保證答案在 text 範圍以內。這似乎是個假的 text 似乎真的 text 是用尤拉迴路做的,但是它並不能維護鏈的資訊,但可以支援換根。雖然還是沒有 text 強 儘管...
題解 Hikari與組合數
tairitsu 給 hikari 出了乙個組合數的題 求出 begin sum xc i c 998244353 end hikari稍微想了想這不是個傻叉的楊輝三角嗎,但她看到資料範圍後就更懵逼了,於是她來尋求你的幫助。第一行乙個整數 t 表示資料組數。接下來 t 行,每行分別有三個整數 x y...
交流 題解(容斥原理 組合數)
在此。給你n nn個字串,其中選擇k kk個,如果合法則將 變成字元 26 2626 個都可以,前提是合法 構成乙個只含小寫字母的字串,求可以變成多少種字串。合法要求 乙個位置上要不只有一種小寫字母,要不是 解法 可以用狀壓dpdp dp或者容斥原理 組合數完成。首先鋪墊三個內容 交集 並集 集合大...