最優質數求解演算法

2021-10-01 23:27:15 字數 1365 閱讀 3618

質數求解演算法,通常分為試除法和篩選法,此篇介紹篩選法中的最優解法。

話不多說,先上** !(^_^) !

class

solution}}

} system.out.

println

("1到"

+n+"總共"

+res.

size()

+"個質數: ");

for(

int num:res)

}}

相信了解過埃式篩法的同學都很熟悉其原理:

將質數的倍數從質數表中篩去,剩下的皆為質數。

通常我們在篩選時的**如下所示:

for

(int i=

2;i<=n;i++)}

}

舉例說明:

2為質數,其篩除過程:4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36…

3為質數,篩除:6,9,12,15,18,21,24,27,30…

5為質數,篩除:10,15,20,25,30…

由此可見,篩除過程存在重複篩除的數字如:6,10,12,20,24,30等,那麼怎麼解決重複篩除呢?

1. 篩除的起始倍數:i

2. 篩除倍數j的選擇:大於等於i的質數,及其與(i,i^

2,i^3..

.)的乘積

3. 篩除的結束條件:i*j<=n

經過以上步驟的修改,之前的篩除過程如下:

2為質數,其篩除過程:4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36…

3為質數,篩除:9,15,21,27,33,39,45,51…

5為質數,篩除:25,35,55…

大功告成,重複篩選已經不存在了。

經過更新公升級後的篩法:

for

(int i=

2;i<=n;i++)}

}}

實驗結果:通過對篩選次數進行統計,求解1000以內的質數,原篩法(篩除倍數從2開始,直到乘積大於n結束)需要1549次篩除操作,若篩選倍數從i本身開始,乘積大於n結束,需要1411次篩除操作。

使用公升級後的篩法(選擇大於i的質數及其與(i,i2,i3,i4…)的乘積作為篩選倍數)只需831次篩除操作,實現了去重,最大化效能。

注:1000以內共169個質數.

最優化字串求質數演算法

最優化字串求質數演算法 string 被除數 2 除數 2 除數後 2 輸出 最小公倍集 string.join r n 讀文字記錄 system.environment.currentdirectory 求質數 最小公倍集.txt list讀被除數 讀文字記錄 system.environment...

python 質數因子求解

思路 從2開始到sqrt n 開始遍歷,當n i等於0時,當前i就是乙個質因子,之所以只遍歷到sqrt n 原因就是如果到sqrt n 後還是沒找到質因子,當再往上找時不會再有質因子,因為如果再往上找還有質因子,n除以這個質因子一定小於sqrt n 那在2到sqrt n 之間應該有它的質因子,與前面...

7 4求解最優裝載

1.問題描述有n個貨櫃要裝上一艘載重量為w的輪船,其中貨櫃i 1 i n 的重量為wi。不考慮貨櫃的體積限制,現要選出盡可能多的貨櫃裝上輪船,使它們的重量之和不超過w。2.解題思路當重量限制為w時,wi越小可裝載的貨櫃個數越多,所以採用優先選取重量輕的貨櫃裝船的貪心思路。include using ...