線性篩質數,線性求尤拉

2021-08-18 14:45:33 字數 1152 閱讀 8215

本篇前半部分講線性篩質數,也叫尤拉篩,後半篇講解線性求尤拉函式。

我們有一種篩質數的辦法,就是列舉每個質數,然後把這個質數的倍數都篩掉,這個做法比較簡單,在這裡不做過多介紹。尤拉篩就是在這個方法的基礎上,使得每個合數只會被它最小的那個質因子篩掉,保證了複雜度是線性的

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的殘暴資料會跪,於是,線...