線性篩法與積性函式

2022-03-17 01:57:56 字數 1428 閱讀 9226

尤拉函式:

\(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 ...