編乙個程式求質數的和

2021-06-27 08:28:17 字數 784 閱讀 1715

編乙個程式求質數的和,例如f(7) = 2+3+5+7+11+13+17=58。

方法1:

對於從2開始的遞增整數n進行如下操作:

用 [2,n-1] 中的數依次去除n,如果餘數為0,則說明n不是質數;如果所有餘數都不是0,則說明n是質數,對其進行加和。

空間複雜度為o(1),時間複雜度為o(n^2),其中n為需要找到的最大質數值(例子對應的值為17)

方法2:

可以維護乙個質數序列,這樣當需要判斷乙個數是否是質數時,只需判斷是否能被比自己小的質數整除即可。

對於從2開始的遞增整數n進行如下操作:

用 [2,n-1] 中的質數(2,3,5,7,開始時此序列為空)依次去除n,如果餘數為0,則說明n不是質數;如果所有餘數都不是0,則說明n是質數,將此質數加入質數序列,並對其進行加和。

空間複雜度為o(m),時間複雜度為o(mn),其中m為質數的個數(例子對應的值為7),n為需要找到的最大質數值(例子對應的值為17)。

方法3:

也可以不用除法,而用加法。

申請乙個足夠大的空間,每個bit對應乙個整數,開始將所有的bit都初始化為0。

對於已知的質數(開始時只有2),將此質數所有的倍數對應的bit都改為1,那麼最小的值為0的bit對應的數就是乙個質數。對新獲得的質數的倍數也進行標註。

對這樣獲得的質數序列累加就可以獲得質數和。

空間複雜度為o(n),時間負責度為o(n),其中n為需要找到的最大質數值(例子對應的值為17)

靜水流風注:

方法3有乙個專門術語,篩法。維基百科上有乙個很形象的動畫展示:

如何求乙個組合數的除以乙個質數的餘數

leetcode上的1223題 投擲乙個骰子n次,並給出乙個長度為6的陣列,數值不超過15,分別表示1,2,3,4,5,6不能連續出現的次數,求投這n次可能出現的滿足要求的序列的種數。用乙個三維陣列a 6 16 n a 6 16 n a 6 1 6 n 進行動態規劃就可以解決。但是現在加強一下限制,...

php實現求乙個數的質數因子

1 2 num trim fgets stdin 3 如果 num大於1 4 i 2 5 while num 1 10 i 11 12 13 功能 輸入乙個正整數,按照從小到大的順序輸出它的所有質數的因子 如180的質數因子為2 2 3 3 5 最後乙個數後面也要有空格 詳細描述 函式介面說明 pu...

複習之求乙個數的約束之積模乙個質數

首先我們知道對於乙個數x,他的約數之積可以表示為f x x d x 2 其中d x 為x的約束的個數。當x很大的時候d x 會變的非常大,很難將確切的d x 算出來,費馬小定理告訴我們當p是質數的時候a p a mod p 當a與p互質的時候式子就變成了a p 1 1 mod p 通過這個我們可以對...