欧拉定理
【前言】
欧拉定理挺好玩的。但是一般就用来优化模算术下的乘方运算,没啥意思。不过它的性质比较有意思,在很多模算术带乘方的玩意里有奇效。更何况欧拉函数其本身就比较神奇。
前置技能:容斥,数论基础,同余基础。
【欧拉函数】
欧拉函数\(\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\)。
待更,虽然基本上没啥了,后续会更新一些题目。