尤拉函式線性篩模板

2021-08-14 04:34:49 字數 468 閱讀 2179

此模板主要用來求1-n(n<=1e6)以內的尤拉函式,順帶把素數也篩了出來.尤拉函式表示n以內與n互素的數,其中phi[1]=1。這裡主要利用了尤拉函式的兩個性質:

1.若p是x的因子,則e(p*x)=p*e(x),證明直接利用算數基本定理就行了。

2.若p是素數,且x與p互素,(即x,p都為素數),則e(p*x)=e(p)*e(x)。

**:

#include#includeusing namespace std;

const int maxn = 1e6 + 5;

bool vis[maxn];

int phi[maxn],prim[maxn/10],n,cnt;

///n為使用者輸入

void gephi()

for(int j=1;j<=cnt;j++)else phi[i*tp]=phi[i]*phi[tp];}}

}

尤拉函式線性篩(模板)

關於尤拉函式篩法,之前一直用的o n 2 演算法 phi 1 1 邊打表邊篩選 for int i 2 i 1005 i phi i i for int i 2 i 1005 i if phi i i for int j i j 1005 j i phi j phi j i i 1 其實如果資料小的...

線性篩尤拉函式

在數論,對正整數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...

模板 線性篩素數 尤拉篩法

o n 處理出n以內所有素數 使用 合數 最大因數 除1和本身外 最小質因數 的原理來篩,每個數隻會被篩一次 對於每個數i,令它是某數的最大因數,然後從小到大地找 i的素數j,則i j是合數 直到找到某個j使得 i j 0 因為再往後的話,j i的某個因子,我們能交換j 和i的這個因子,所以i不是i...