試除唄…………不解釋。**如下:
p.s:我給的是乙個完整程式,一般只需要寫成void函式就可以。
//enor prime 1 o(n*sqrt(n))
#include
#include
#define maxn 10001
using
namespace
std;
int prime[maxn];
int cnt=0;
int main()
if(flag)
}//輸出2到n的所有質數
for(int i=1;i<=cnt;i++)
return
0;}
演算法的思想:引入乙個 vst 陣列,每找到乙個素數 i,就篩掉大於等於 i²的所有 i 的倍數(思考為什麼不用考慮 i² 之前 i 的倍數?),這樣篩去合數的過程變得具有目的性。 素數篩法(模板)
質數 在大於1的整數中,如果只包含1和本身這兩個約數,那麼就是素數時間複雜度 o sqrt n static boolean prime int n return true 合數只會被它的最小質因子篩掉 時間複雜度 o n static final int n static int prime ne...
素數篩法 模板
為什麼只遍歷到sqrt n 就夠了?反證法 假設只遍歷2 sqrt n 不能把所有非素數置為false,即遍歷完了2 sqrt n 後,在sqrt n n範圍內仍有乙個非素數k,但isprime k true。證 k在sqrt k 之前一定有乙個素數因子 任何非素數都可以拆成素數的乘積,所以k至少有...
模板 素數篩法
好 快 素數是什麼就不用介紹了吧。先介紹判斷素數的方法 先看樸素演算法 for i 2 i if n i 0 break if i n printf n is prime else printf n is not prime 真的好樸素。用時o n 肯定不行啊,吃棗藥丸的。怎麼優化呢?不難發現,如果...