判斷 篩選 素數

2021-10-01 13:28:56 字數 1123 閱讀 9102

舉例:篩選從1—n的所有素數

第一種

暴力判斷,無優化。直接根據素數的定義判斷即可

#include

intmain()

;for

(int i=

2; i<=n; i++

)for

(int i=

1; i<=n; i++)if

(prime[i]

)printf

("%d\n"

,i);

}

第二種

素數的倍數一定不是素數,對其進行標記。最後遍歷一遍陣列,可得未被標記的即為篩選出的素數。

#include

int prime[

1100]=

;//初始化0,假設全部是素數,標記為0;

intmain()

}for

(int i=

1;i<=n;i++)if

(prime[i]==0

)printf

("%d\n"

,i);

}

第三種

線性篩法:不選重複過的數,大大加快了**執行時間

注意這個分解:任意乙個合數都可分解為素數相乘,如4=2x2;12=2x2x3;15=3x5 ……

#include

intmain()

;int prime[

1000]=

;int n=

1000

,cnt=0;

//cnt同上,計數,表示下標

for(

int i=

2; i<=n; i++

)//對2-n的數進行遍歷

}for

(int i=

0; i<=n; i++)if

(prime[i]

)printf

("%d\n"

,prime[i]);

}

** **會更加直觀一點 **

_ 第三種方法最快 _

篩選法判斷素數

常規的判斷1 n以內的素數的時間複雜度為o n sqrt n 在n很大的時候時間很長,所以需要別的方法來判斷素數。這裡介紹篩選法。1 申請乙個陣列bool prime n 1 初始化所有的奇數下標為true,偶數下標為false 2例外 2 for int i 3 i sqrt n i 2 3 最後...

素數判斷與素數篩選法

方法一 直接判斷,思想簡單,實現比較簡單,但是複雜度過高bool isprime int a return true 方法二 素數篩選法 eratosthenes 篩法 只有素數才能當篩子 篩掉對應的倍數,不超過要求的範圍即可 遍歷一遍 void getprime int n 從i i開始計算 j ...

(基本數論)素數篩選與判斷

這種方法就是將給出的數判斷能否找到處1以及它本身以外的因數。樣例 include using namespace std bool f int n return 1 int main 埃氏篩法就是從2開始篩掉2的倍數 必須從2倍開始 往下依次進行。樣例 include using namespace...