本篇前半部分講線性篩質數,也叫尤拉篩,後半篇講解線性求尤拉函式。
我們有一種篩質數的辦法,就是列舉每個質數,然後把這個質數的倍數都篩掉,這個做法比較簡單,在這裡不做過多介紹。尤拉篩就是在這個方法的基礎上,使得每個合數只會被它最小的那個質因子篩掉,保證了複雜度是線性的
memset(isprime,1,sizeof(isprime));
isprime[1]=0;
for (int i=2;i<=10000;i++)
}
所有變數名都是字面意思。
若i%prime[j]==0,那麼i*prime[j+1]也一定是prime[j]的倍數,一定被prime[j]篩過了,所以就可break了,這樣就保證了每個合數只被自己的最小質因子篩一次。
∗ ∗
x)=p
∗'>∗
∗φ(x) 當 x mod p==0
我看了很多部落格這裡的證明都是略,所以我這裡給出證明
φ(p∗
∗
x)=p
∗'>∗∗x
∗ ∗
(1-1a
1'>1a1
1a1)
∗ ∗
(1-1a
2'>1a2
1a2)
∗ ∗
……∗'>∗
∗(1-1a
n 1an
) 其中a
1 a
1…an
a
n均為p
∗ ∗
x的質因子
然後可以發現因為x是p的倍數,p是質數,所以x的質因子和p*x的質因子構成相同,所以結論就是對的了
2:φ(x
∗'>∗
∗p)=(p-1)*φ(x) 當 x mod p!=0
因為p是乙個質數,而x不是p的倍數,所以x和p互質
根據φ是乙個積性函式,φ(x
∗ ∗
memset(isprime,1,sizeof(isprime));
isprime[1]=0;
for (int i=2;i<=10000;i++)
else phi[i*prime[j]=(prime[j]-1)*phi[i];
}}
線性篩求尤拉函式
蒟蒻要開始打數論模板了。尤拉函式 小於n且與 n互素的數個數,記為 n 它有這樣幾個優越的性質 1.phi p p 1 因為素數p除了1以外的因子只有p,所以與 p 互素的個數是 p 1個 2.phi p k p k p k 1 p 1 p k 1 證明 令n p k,小於 n 的正整數共有 p k...
求質數數量 了解線性篩(尤拉篩)
leetcode每日一題 204.計數質數 簡單 看到題第乙個想法就是判斷每個數是否是質數 方法一 當然最簡單的想法會超時 然後就想到了如果某個數x是質數 那麼x的倍數必定是合數可以不用判斷 後來查了資料知道了原來有個學名 埃氏篩 埃拉託斯特尼篩法 方法二 這裡還對2的倍數進行了預處理 然而還是超時...
線性篩(尤拉篩)
昨天的考試跪的一塌糊塗 第一題水過,第二題帶wa的樸素,最後題忘了特判左端點全跪,分數比起預計得分整整打了個對折啊!步入正題 線性篩 尤拉篩 一般的篩法 ppt裡叫埃拉託斯特尼篩法,名字異常高貴 的效率是o nlglgn 其實很接近o n 啊!對於一些例如n 10000000的殘暴資料會跪,於是,線...