zoukankan      html  css  js  c++  java
  • 欧拉定理概述

    欧拉定理

    【前言】

    欧拉定理挺好玩的。但是一般就用来优化模算术下的乘方运算,没啥意思。不过它的性质比较有意思,在很多模算术带乘方的玩意里有奇效。更何况欧拉函数其本身就比较神奇。

    前置技能:容斥,数论基础,同余基础。

    【欧拉函数】

    欧拉函数(varphi(n))表示(1sim n)中与(n)互质的数的个数。

    给出数学定义如下

    [varphi(n)=sum_{i=1}^n[gcd(i,n)==1] ]

    其中([x])表示艾弗森约定。

    欧拉函数是积性函数,即对于(forall n,p),若(gcd(n,p)=1),则有(varphi(np)=varphi(n)*varphi(p))


    显然,对于任意质数(p),有

    [varphi(p)=p-1 ]


    而对于任意整数,不难给出一个计算公式如下

    若算数基本定理即(n=p_1^{c_1}p_2^{c_2}dots p_m^{c_m})成立,则有

    [varphi(n)=n*prod_{i=1}^m(1-frac{1}{p_i}) ]

    证明:

    (a,b)(n)互质,则满足(a mid n)(a)(large frac{n}{a})个,满足(b mid n)(b)(largefrac{n}{b})个。根据容斥原理,(1sim 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))(1sim 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)的所有质因子,即

    [egin{align}varphi(n)&=n*prod_{i=1}^m(1-frac{1}{p_i})\&=n'*p_1*prod_{i=1}^m(1-frac{1}{p_i})\&=p_1*varphi(n')end{align} ]

    对于(n'~mod~p ot= 0),显然有(c_1=1),那么(n')不包含(p_1),故(gcd(n',p_1)=1)

    又由于(varphi(n))为积性函数,则有

    [varphi(n)=varphi(p_1)*varphi(n')=(p_1-1)*varphi(n') ]



    【欧拉定理】

    (a,p)互质,则有

    [a^{varphi(p)}equiv 1 pmod p ]

    证明:

    ({overline {x_1} ,overline {x_2},dots ,overline {x_{psi(p)}}})(p)的简化剩余系,即(varphi(p))个与(p)互质的数表示的同余类的集合。

    若存在一组(x_i,x_j(x_i ot= x_j)),使得(ax_iequiv ax_j pmod p),即(a(x_i-x_j)equiv 0 pmod p),由(a)(p)互质得到(x_iequiv 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_2dots x_{varphi(p)})都与(p)互质,得到

    [{x_1} {x_2}dots {x_{varphi(p)}} equiv {ax_1} {ax_2}dots {ax_{varphi(p)}} pmod p ]

    [{x_1} {x_2}dots {x_{varphi(p)}} equiv a^{varphi(p)}( {x_1}{x_2}dots {x_{varphi(p)}}) pmod p\a^{varphi(p)} equiv 1 pmod p ]


    推论

    [a^{b}=a^{b ~ mod ~ varphi(p)} pmod p ]

    证明:

    (a,p)互质时,设(b=k*varphi(p)+r),则有(r=b mod varphi(p))

    [a^b=a^{k*{varphi(p)+r}}=(a^{varphi(p)})^k*a^r=1^k*a^{b ~mod~ varphi(p)}=a^{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=a^0a^1cdots a^{varphi(p)} a^{varphi(p)+1}cdots a^{varphi(p)+varphi(p)}cdots pmod p ]


    用这个推论即可解决(a^b~mod ~p),当(a,b)都很大的情况。

    板子:P5091


    似乎很多人称之为欧拉反演?

    对于任意正整数(n),有

    [sum_{dmid n}varphi(d)=n ]

    证明:

    由于对于一个质数(p),有

    [varphi(p)=p-1 ]

    (kp)不互质的数为(1,p,2p,3p,4p,cdots ,kp),显然有(k+1)个,那么根据(varphi)定义,有

    [varphi(kp)=k(p-1) ]

    (可以从这里看出(varphi(n))为积性函数)

    而对于(p^k),与它不互质的数为(1,p,p^2,p^3,cdots,p^k),于是

    [varphi(p^k)=p^{k-1}(p-1) ]

    那么

    [egin{align} sum_{dmid p^k}varphi(d) &=1+varphi(p)+varphi(p^2)+cdots+varphi(p^k)\ &=1+(p-1)+p(p-1)+p^2(p-1)+cdots+p^{k-1}(p-1)\ &=p^k end{align} ]

    (varphi(n))为积性函数,且(p^k)与除(p^{k'})外的所有数互质,得到(sum_{dmid n}varphi(d)=n)

    证毕。


    用这个推论可以解决一些比较神奇的数论题。


    (forall n>1,1sim n)中所有互质的数的和为(n*varphi(n)/2)

    待更,虽然基本上没啥了,后续会更新一些题目。

  • 相关阅读:
    微软消息队列
    使用Memcached Provider客户端的increment()||decrement()操作小结
    SQL While And Sql Array
    好管理是成功的99%
    Javascript图片无缝滚动
    javascript数组复习
    前端面试题--js切换td中的值
    推荐使用:易企在线客服升级版
    drupal中根据不同的内容类型节点显示不同的样式
    defer和async(原生js学习)转
  • 原文地址:https://www.cnblogs.com/DarkValkyrie/p/11739566.html
Copyright © 2011-2022 走看看