此模板主要用來求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...