date:2019/10/16??
其實現在都快1點了,算是16號,啊??
今天講了素數的篩法
其實,在很小的資料範圍內,不同的演算法複雜度是差不多的,但是,如果處理幾個資料,演算法的作用就沒有發揮出來
樸素演算法
埃氏篩法
線性篩法(尤拉篩)
p3383 【模板】線性篩素數
素數最樸素的演算法了
它的時間複雜度是o(n*sqrt(n))
的
bool prime (
int x)
}return1;
}
但是,這只適用於小資料的處理,所以我們需要改進演算法
時間複雜度是
o(nloglogn)
具體**是
for
(int i =
1; i <=
sqrt
(n); i ++
)}
但是這個演算法在1e7左右還是不太好用,會tle(~~哭暈~
而且埃氏篩法還有乙個缺陷 :
對於乙個合數,有可能被篩多次。例如 30 = 2 * 15 = 3 * 10 = 5*6……
那麼如何確保每個合數只被篩選一次呢?我們只要用它的最小質因子來篩選即可,這便是尤拉篩法
線性篩法是什麼意思呢?
就是我們在埃氏篩法中有個問題就是乙個數可能被篩多次
所以就造成了時間的浪費,所以演算法就在這裡做了改進
基本思想:在埃氏篩法的基礎上,讓每個合數只被它的最小質因子篩選一次,以達到不重複的目的
漲知識ing~~~
%%%%%%dalao 們
做個水題
p3383 【模板】線性篩素數
裸題
//author:philfan;
;//如果質數沒有多,b[i]就和上乙個一樣
for(
int j =
0;j < tot && i * p[j]
<= n+
5; j++)}
}int
main()
else
}return0;
}
素數篩法(素數篩 線性篩)
求素數的方法在現階段可以總結為三種 這種方法最為簡單但效率太低,經過優化時間複雜度最低是o n sqrt n 輸入乙個n,輸出n以內所有素數 include intprime int n if flag 0 優化 printf d i intmain 素數篩法原理 2是素數,那麼2的所有倍數都是合數...
找素數(質數) 線性篩法和埃氏篩法
先看這道題 洛谷p1217回文質數 對於這道題,普通的暴力模擬會tle,所以得尋求改進。這裡我學會了兩種方法 第一種 線性篩法 這種演算法的核心思想就是 任何乙個合數都可以由質數相乘得到 下面就是核心 吃透了核心 就可以在其中新增點細節,然後就可以拿去解決問題了 這裡需要開多大的陣列取決自己 boo...
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不是素數哦 這樣已經不慢,但由於所有非素...