線性篩尤拉函式學習筆記

2022-09-25 11:36:07 字數 650 閱讀 9588

我回來了,在被模板蹂躪之後。

預先規定:

參考篩素數的線性篩,當篩到數字 \(i\) 時,小於 \(i\) 的數的尤拉函式和小於 \(i\) 的質數已經篩出,利用 \(i\) 和 \(s\) 向後更新。

對於數字 \(i\),如果此時 \(f_i=0\),說明這個數的最小質因數不會在 \(\left[2,i-1\right]\) 的範圍內出現,也易得數字 \(i\) 是個質數,根據前一篇部落格中寫到的尤拉函式性質可知,此時 \(\varphi(i)=i-1\)

所以,如果數字 \(i\) 為質數:

將 \(i\) 加入篩出的素數表。

\(f_i=i\),質數的最小質因數是自身。

更新 \(p_i\) 的值為 \(i-1\)。

接下來,無論 \(i\) 是否為質數,直接在素數表中列舉 \(s_j\)。

有兩種證明方法,一種是推論,另一種是通式。

\(i \bmod s_j=0\) 時無法直接計算的原因是兩個數不互質。

if(x==1)return 0;p[1]=1;

for(int i=2;in||s[j]>f[i])break;f[s[j]*i]=s[j];

if(s[j]else p[s[j]*i]=s[j]*p[i];

}}

線性篩尤拉函式

在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目,用 varphi n 表示。其中 p 1,p 2 p n 為 x 的所有質因數,x 是不為0的整數。varphi 1 1 當正整數p為質數時 varphi n n 1 尤拉函式是積性函式,當a與b互質時,滿足 varphi a tim...

線性篩(尤拉篩)

昨天的考試跪的一塌糊塗 第一題水過,第二題帶wa的樸素,最後題忘了特判左端點全跪,分數比起預計得分整整打了個對折啊!步入正題 線性篩 尤拉篩 一般的篩法 ppt裡叫埃拉託斯特尼篩法,名字異常高貴 的效率是o nlglgn 其實很接近o n 啊!對於一些例如n 10000000的殘暴資料會跪,於是,線...

尤拉篩 線性篩

實現 include using namespace std const int max n 1e8 int prime max n cnt bool st max n 使用bool陣列節省空間 void is prime int n intmain 每個合數只被自己最小的質因子篩去。現在證明在i ...