求質數之Eratosthenes篩選法(C 版)

2021-09-30 14:13:12 字數 878 閱讀 1007

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...