Eratosthenes篩法求素數

2021-08-28 09:26:57 字數 723 閱讀 9576

篩法的思想:對於不超過n的每個非負整數p,刪除2p,3p,4p,5p,…,當處理完所有數之後,還沒有被刪除的數就是素數

這是簡易版的篩法,也最好理解

for(int i=2;i<=n;i++) 

for(int j=i*2;j<=n;j+=i)

vis[j]=false;

還可以繼續改進,為什麼呢?給定外層迴圈變數i,內層迴圈的次數n/i-1改進:內層迴圈不必從i*2開始,它已經在i=2時被篩掉了

#include#include#includeusing namespace std;

bool vis[9999];

void eratosthenes() //eratosthenes篩法

int main()

{ int temp,n;

memset(vis,true,sizeof(vis)); //素數表初始化

eratosthenes();

while(cin>>n) //輸入區間上限

{ temp=0;

for(int i=0;i<=n;i++) //素數表初始化

{if(temp%10==0&&temp!=0)

{temp=0;

cout《素數定理:count(x)=x/ln x

count(x)表示不超過x的素數個數,它和x/ln x比較接近,所以這個定理是可以用來求乙個區間的素數個數的

Eratosthenes篩法(素數篩)

最一般的素數篩思想很簡單,對於不超過maxx的每個非負整數p,刪除2p,3p,4p,然後剩下的就是素數,複雜度o nlogn 因為對內層迴圈n 2 n 3 n n 小於 1 1 2 1 3 1 n ln n 1 其中 為尤拉常數 0.577218 應當注意,1不是素數哦 這樣已經不慢,但由於所有非素...

Eratosthenes篩法的F 實現

什麼是eratosthenes篩法 考慮乙個常見的數論問題,指定乙個整數,求出不大於該數的所有質數。我們可以先寫乙個函式來判斷某個整數是否為質數,然後用它逐一判斷每個整數,而eratosthenes篩法比這種方法高效得多。下面舉例來說明它的原理。觀察下面的彩圖 來自wikipedia 這裡是檢查12...

篩法求素數 線性篩法求素數

2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...