歐拉定理
【前言】
歐拉定理挺好玩的。但是一般就用來優化模算術下的乘方運算,沒啥意思。不過它的性質比較有意思,在很多模算術帶乘方的玩意里有奇效。更何況歐拉函數其本身就比較神奇。
前置技能:容斥,數論基礎,同余基礎。
【歐拉函數】
歐拉函數\(\varphi(n)\)表示\(1\sim n\)中與\(n\)互質的數的個數。
給出數學定義如下
其中\([x]\)表示艾弗森約定。
歐拉函數是積性函數,即對於\(\forall n,p\),若\(gcd(n,p)=1\),則有\(\varphi(np)=\varphi(n)*\varphi(p)\)。
顯然,對於任意質數\(p\),有
而對於任意整數,不難給出一個計算公式如下
若算數基本定理即\(n=p_1^{c_1}p_2^{c_2}\dots p_m^{c_m}\)成立,則有
證明:
設\(a,b\)與\(n\)互質,則滿足\(a \mid n\)的\(a\)有\(\large \frac{n}{a}\)個,滿足\(b \mid n\)的\(b\)有\(\large\frac{n}{b}\)個。根據容斥原理,\(1\sim n\)中不能被\(a,b\)中任意一個數整除的數共有\(\large n-(\frac{n}{a}+\frac{n}{b})+\frac{n}{ab}\)個,即\(\large n*(1-\frac{1}{a})*(1-\frac{1}{b})\)個。(有木有二項式定理的影子?)
推廣至一般,對於\(n\)的所有質因數,我們使用容斥定理即可得到歐拉函數。
代碼實現
根據以上分析,不難想到在分解質因數時\(O(\sqrt{n})\)求\(\varphi(n)\)
inline int phi(int n)
{
int ans=n;
for(int i=2;i<=sqrt(n);++i){
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) ans=ans/n*(n-1);
return ans;
}
利用歐拉篩,\(O(n)\)求\(1\sim n\)的所有\(\varphi\)函數的值
inline void init(int n)
{
phi[1]=1;
for(int i=2;i<=n;++i){
if(!v[i]){phi[i]=i-1;p[++cnt]=i;}
for(int j=1;j<=cnt;++j){
if(p[j]>n/i) break;
v[i*p[j]]=1;
if(i%p[j]==0){
phi[i*p[j]]=phi[i]*p[j];break;
}
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
證明:
根據算數基本定理\(n=p_1^{c_1}p_2^{c_2}\dots p_m^{c_m}\),
設\(p_1\)為\(n\)的最小質因子,則在歐拉篩過程中,存在\(n'\),使得\(n'=\frac{n}{p_1}\),即\(n\)是由\(n'*p_1\)篩出來的。
對於\(n' ~mod ~p_1=0\),顯然有\(c_1>1\),那么\(n'\)含有\(n\)的所有質因子,即
對於\(n'~mod~p\not= 0\),顯然有\(c_1=1\),那么\(n'\)不包含\(p_1\),故\(gcd(n',p_1)=1\)
又由於\(\varphi(n)\)為積性函數,則有
【歐拉定理】
若\(a,p\)互質,則有
證明:
設\(\{\overline {x_1} ,\overline {x_2},\dots ,\overline {x_{\psi(p)}}\}\)為\(p\)的簡化剩余系,即\(\varphi(p)\)個與\(p\)互質的數表示的同余類的集合。
若存在一組\(x_i,x_j(x_i\not= x_j)\),使得\(ax_i\equiv ax_j \pmod p\),即\(a(x_i-x_j)\equiv 0 \pmod p\),由\(a\)與\(p\)互質得到\(x_i\equiv x_j \pmod p\)。那么,由於該簡化剩余系關於模\(p\)乘法封閉,可知\(\{\overline {x_1} ,\overline {x_2},\dots ,\overline {x_{\varphi(p)}}\}\)中任意元素都滿足上述性質。則有\({\{\overline {ax_1} ,\overline {ax_2},\dots ,\overline {ax_{\varphi(p)}}\}}\)為\(p\)的一個簡化剩余系。
由於\(x_1,x_2\dots x_{\varphi(p)}\)都與\(p\)互質,得到
即
推論
一
證明:
當\(a,p\)互質時,設\(b=k*\varphi(p)+r\),則有\(r=b \mod \varphi(p)\)。
而當\(a,p\)不一定互質時,若\(b>=\varphi(p)\),則有\(a^{b}=a^{b ~ mod ~ \varphi(p)+\varphi(p)} \pmod p\)
證明:
由抽屜原理,對於任意\(x~mod ~p,x>p\),至多有\(x+1\)種余數。即\(a^b ~mod ~p\)存在指數循環節,其循環節長度為\(\varphi(p)\),該式可寫作
用這個推論即可解決\(a^b~mod ~p\),當\(a,b\)都很大的情況。
板子:P5091
二
似乎很多人稱之為歐拉反演?
對於任意正整數\(n\),有
證明:
由於對於一個質數\(p\),有
與\(kp\)不互質的數為\(1,p,2p,3p,4p,\cdots ,kp\),顯然有\(k+1\)個,那么根據\(\varphi\)定義,有
(可以從這里看出\(\varphi(n)\)為積性函數)
而對於\(p^k\),與它不互質的數為\(1,p,p^2,p^3,\cdots,p^k\),於是
那么
由\(\varphi(n)\)為積性函數,且\(p^k\)與除\(p^{k'}\)外的所有數互質,得到\(\sum_{d\mid n}\varphi(d)=n\)。
證畢。
用這個推論可以解決一些比較神奇的數論題。
三
\(\forall n>1,1\sim n\)中所有互質的數的和為\(n*\varphi(n)/2\)。
待更,雖然基本上沒啥了,后續會更新一些題目。