尤拉函式:
\(1.\varphi(p)=p-1\)
證明:顯然
\(2.\varphi(i*p)=p*\varphi(i)\) , \(if\space i \bmod p = 0\)
引理1:\(\varphi(p^a)=(p-1)*p^\)
證明:比 \(p^a\) 小的數一共有 \(p^a-1\) 個,其中與 \(p^a\) 不互質的且小於 \(p^a\) 的
,即 \(p\) 的倍數 \(p*t\) 一共有 \(p^-1\) 個,則 \(\varphi(p^a)=p^a-1-(p^-1)=(p-1)*p^\)
引理2:\(\varphi(n)=n*(1-\frac)*(1-\frac)*···*(1-\frac)\)
證明:\(\varphi(n)\)
\(=\varphi(p_1^)*\varphi(p_2^)*···*\varphi(p_k^)\)
\(=(p_1-1)*p_1^*(p_2-1)*p_2^*···*(p_k-1)*p_k^\)
\(=(p_1^-p_1^)*···*(p_k^-p_k^)\)
\(=p_1^*(1-\frac)*···*p_k^*(1-\frac)\)
\(=(p_1^*p_2^*···*p_k^)*(1-\frac)*(1-\frac)*···*(1-\frac)\)
\(=n*(1-\frac)*(1-\frac)*···*(1-\frac)\)
證明:設 \(i\) 為正整數,且 \(i=p_1^*p_2^*···*p_n^\)
\(\varphi(i)=i*(1-\frac)*···*(1-\frac)\)
\(\because i\bmod p=0\)
\(\therefore p為i的質因子\)
\(\therefore \varphi(i*p)=i*p*\prod_^ (1-\frac)=\varphi(i)*p\)
\(3.\varphi(i*p)=\varphi(i)*(p-1)\) , \(if\space i \bmod p \ne 0\)
證明:\(\because i \bmod p \ne 0\)
\(\therefore p不為i的質因子\)
\(\therefore \varphi(i*p)=i*p*(1-\frac)*\prod_^n (1-\frac)=i*(p-1)*\prod_^n (1-\frac)=\varphi(i)*(p-1)\)
於是可以通過這三個性質再配合上線性篩預處理處尤拉函式。
code:
void get(int listsize)
for(int j=1;j<=primesize&&i*prime[j]<=listsize;j++)
phi[i*prime[j]]=phi[i]*(prime[j]-1);}}
}
約數個數&約束和篩法:!!!! 線性篩篩積性函式
概念 定義域為正整數的函式是數論函式。設p,q互質,f p q f p f q 稱f為積性函式。如約數,尤拉,莫比烏斯。任意p,q,f p q f p f q 稱f為完全積性函式。如1函式,即f i 1。我們一般用線性篩就可以預處理積性函式。尤拉phi void phii for int j 1 j...
積性函式線性篩
oi中有時需要我們線性篩某些函式,我們篩的主要是積性函式 1st 線性篩素數 include includeusing namespace std const int maxn 1e4 5 int n,prime maxn vis maxn tot void get prime int n int ...
積性函式篩法
很多常用的數論函式都是積性函式,而在題目中,我們常常需要線性 甚至更高 的篩法。對於積性函式,我們可以在篩素數的基礎上稍加修改,即可完成線性篩。首先,注意到積性函式的特點 f xy f x times f y 而可以線性篩的積性函式,需要知道以下兩個式子的快速求法 f p quad f p k p ...