eratosthenes計算小於100000的素數質數:時間複雜度是o(nloglogn)
演算法原理
乙個合數總是可以分解成若干個質數的乘積,那麼如果把質數(最初只知道2是質數)的倍數都去掉,那麼剩下的就是質數了。
二、步驟
(1)先把1刪除(1既不是質數也不是合數)
(2)讀取佇列中當前最小的數2,然後把2的倍數刪去
(3)讀取佇列中當前最小的數3,然後把3的倍數刪去
(4)讀取佇列中當前最小的數5,然後把5的倍數刪去
…….
(n)讀取佇列中當前最小的狀態為true的數n,然後把n的倍數刪去
思路:用乙個bool陣列,儲存n個數的狀態,初始化都為true,然後從2開始,
如果2的狀態為true,就開始遍歷比n小的所有的2的倍數,將其全部置為false。把2的倍數遍歷完後,繼續往下找下乙個狀態為true的數,
即3,遍歷比n小的所有的3的倍數(按3*3,3*4,3*5這樣遍歷,注意不需要從3*2開始了)。…..最後剩下的狀態為true的數全為質數。
**:
//求n以下的質數
#include
#include
using
namespace
std;
const
int maxn=100;
bool arr[maxn];
int main()
}for(i=2;i<=n;i++)
if(arr[i])
cout
<" ";
return
0;}
演算法之求質數
問題 統計所有小於非負整數 n 的質數的數量。一開始直接使用暴力列舉法 public static intcountprimes int n return count public static boolean isprimes int n return true 發現在leetcode上會超出時間...
求質數演算法之試除法
需求 求得一定範圍內的素數。方法 試除法 1.顧名思義,就是不斷地嘗試能否整除。比如要判斷自然數 x 是否質數,就不斷嘗試小於 x 且大於1的自然數,只要有乙個能整除,則 x 是合數 否則,x 是質數。但是根據上述寫出來的固然可以得到素數,但是花費時間過多。以下是越來越簡化的思路 思路1.德 猜想,...
如何用mysql求質數 求質數的幾種演算法
1 根據質數的定義求 質數定義 只能被1或者自身整除的自然數 不包括1 稱為質數。利用它的定義可以迴圈判斷該數除以比它小的每個自然數 大於1 如果有能被它整除的,則它就不是質數。對應 是 輸出從2到max的所有質數 public static void prime intmax i count if...