用c語言編寫乙個計算20億以內各位之和是4的素數,怎樣編寫更快速?

時間 2021-05-06 11:17:18

1樓:杜紫童

各位之和是4的數字,只有形如以下幾種的數可以滿足:

考慮到需要的是素數,並且大於2的素數都是奇數,所以可以把其中的偶數都排除掉,現在只剩下5種:

1331

121211

1111

遍歷,不斷向各個位之間插入0,即可產生一系列的數,然後判斷它們是否是素數。舉個例子,對於121:

1211021

10021

...1000000021

1201

10201

100201

...1000000201

...1200000001

無論怎麼插入0,當插入到第8個的時候,都會超過20億,所以插入0的個數為0到7個,因此對於121來說,僅會產生 個數字。

稍稍計算一下可知,總共只會產生 個數字。逐個判斷是不是素數應該已經不慢了,如果再加上一些技巧,那就會更快。

更:@izlyforever 大佬給出了更一般性的方法,請移步

2樓:啊吧啊吧啊吧

用生成符合你規則的數並加以檢驗這一方式應該可行解釋:遍曆法:

從4開始,依次檢驗4、5、6…

由於這樣暴力的遍歷,很多很明顯無關的數(即不符合各位之和為4)也被遍歷了一次,因此我們可以先按照乙個規則生成待檢驗的數,再加以驗證

生成法:

先按照規則,生成素數或者各位數之和為4的數,再檢驗生成的數是否符合另外的條件,如果符合,做相應的處理

注意你給的範圍2.5 * 10 ^ 9,已經超過了int或者long的有效範圍

3樓:凌帝

我演算法不太好,幫你分析下。

資料最大有2500000000

而long int最大值是2147483647long long int最大值是9223372036854775807

很明顯要用long long int輸入,然後轉換成陣列儲存。

這是基本操作

接下來就是怎麼對資料進行處理了。

等一下,什麼叫各位之和是4的素數,啊,我的天。

是不是你打錯字了。

4樓:老虎說

各位之和是4這個限制入手,另外乙個限制是25億這個數字的最大位數,十億級別最大的位數是10

通過遞迴的方式做,遞迴的引數分別是:

位數(1-10位)或者可以表達為遞迴的層數2. 各位之和(等於4進行素數判斷,大於4跳出遞迴)3. 記錄各位對應的數字的陣列

最後是在遞迴函式內部進行迴圈範圍是 0 - 4,迴圈內再進行遞迴。

如何用c語言編寫乙個程式,計算float x 0 1與0 1的差值

HOOCCOOH 首先假設題主需要這個差值的十進位制表示。根據 IEEE754 浮點使用的二進位制表示法必定在十進位制下有限位數,直接用 printf 指定位數列印即可。唯一需要注意的是到底需要打多少位才夠。我們知道浮點在計算機中表示為 其中 為尾數字數,為浮點指數。又由於 0 eeimg 1 在十...

C語言如何快速的篩選出20億以內各位之和等於4的數?

qufo qufo 歪個樓,我來提供個 golang 版本的。package main package main import fmt func main num 0d10 0for d1 range int 執行一下,差不多幾十毫秒就會得到這麼些結果 別數,總共 660 個 413 2231 40...

僅學過三個月的新手如何用c語言編寫乙個挑夾棋程式?

第一步,學一手Python 第二步,用Python把榜上大佬的走法全都爬下來第三步,把爬下來的走法翻譯成c語言 利益相關 Thank you ALL 洩藥 其實沒人麼,不請自來 這個問題其實非常簡單,它大概分為幾個部分 一 與榜上dalao搞好py關係,熟知高娓瀧,木鄰姐,陳香妃,lution,曾嘖...