浅谈数论

Posted maoyingcheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈数论相关的知识,希望对你有一定的参考价值。

逆元

  • 逆元是一个非常牛逼的东西。求法很多,又很实用。
  • 它可以分为乘法逆元和加法逆元:
  1. 乘法逆元:如果ab==1(mod p)则我们称b是a关于p的(乘法)逆元;

  2. 加法逆元:如果a+b=0则我们称b是a的(加法)逆元。

  • a^-1==b(mod p)-> ab==1(mod p)

  • 条件:(a,p)=1;

  • 整数a对模数p之模逆元存在的充分必要条件是a和p互素,若此模逆元存在,在模数p下的除法可以用和对应模逆元的乘法来达成,此概念和实数除法的概念相同。

    模意义下的逆元就好比实数运算中的倒数,模意义下除以一个数就相当于乘上这个数的逆元,就可以实现模意义下的除法啦!


 费马小定理

  • 条件:gcd(a,p)=1;

  • a^(p-1)==1(mod p),这是定理精髓,由它我们可以推出好多玄妙的结论。

  • 时间复杂度O(log p)
  • 这里给出证明:
    • 因为0,1,2,...,(p-1)为p的完全剩余系,且gcd(a,p)=1,
    • 所以a对p的完全剩余系无影响
    • 所以0*a,1*a,...,(p-1)*a也为p的完全剩余系
    • 所以0*a,1*a,...,(p-1)*a=0,a,2a,...,(p-1)a(mod p)等价于0,1,2,...,(p-1)(mod p)即a*2a*3a*...*(p-1)a=1*2*3*...*(p-1)(mod p)
    • 整理一下:(1*2*...*(p-1))*a^(p-1)=(1*2*3*...*(p-1))(mod p)
    • 然后我们会发现这个式子多优美。
    • a^(p-1)==1(mod p)
  • a^(p-1)==1(mod p)可得:

  1. a^(p-2)==a^-1(mod p)咋一看发现这个式子貌似是乘法逆元,所以说我们多了一种求逆元的方法qaq;
  • 这里千万注意gcd(a,p)=1


 

欧拉函数

  • phi(n)我们将其定义为n的完全剩余系中与n互质的数的个数
  • 我们现将求法说一下(名字是作者瞎起的)
  1. 分解质因数法:我们先求出n的质因数p1~pk,则phi(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pk)即可,相信正确性是有保证的
  2. 欧拉筛法:
    技术图片
    ll  pri[10000002],top,phi[10000002],sum[10000002];
    bool pd[10000002];
    void prime_shaker()
    
        phi[1]=1;
        for(ll i=2;i<=n;i++)
        
            if(!pd[i])pri[++top]=i,phi[i]=i-1;
            for(ll j=1;j<=top&&pri[j]*i<=n;j++)
            
                pd[i*pri[j]]=true;
                if(i%pri[j]==0)
                
                    phi[i*pri[j]]=phi[i]*pri[j];
                    break;
                
                else phi[i*pri[j]]=phi[i]*phi[pri[j]];
            
        
        for(int i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];
    
    Prime_shaker
  3. 暴力QAQ......

欧拉函数性质

  • phi(a*b)=phi(a)*phi(b)

  • 任意质数p使得phi(p)=p-1
  • 如果gcd(a,n)=1 则 (n-a,n)=1
  • n的完全剩余系中所有与n不互质的数的和sum,满足sum=phi(n)*(n/2)
  • 如果质数n=p^k(其中p为质数)则phi(n)=p^k-p^(k-1)
  • n等于n所有约数的phi的和

欧拉定理

  • if(a,p)=1,a^n=a^(n mod phi(p))modp
    因为(a,p)=1
    所以x1*x2*...*(xphi(p))==(a*x1)*......*(a*xphi(p))(mod p)

    令X=x1*x2*....*xphi(p)
    可得X==X*a^phi(p)(mod p)即a^phi(p)==1(mod p)

这里引入欧拉筛法

技术图片
inline void prime_shaker(int n)

    phi[1]=1;
    for(int i=2;i<=n;i++)
    
        if(!pd[i])prime[++top]=i,phi[i]=i-1;
        for(int j=1;j<top&&1ll*prime[j]*i<=n;j++)
        
            pd[i*prime[j]]=1;
            if(i%prime[j]==0)
            
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            
            else phi[i*prime[j]]=phi[i]*phi[prime[j]]
        
    
prime_shaker

欧拉是个伟人!


 

中国剩余定理

 

以上是关于浅谈数论的主要内容,如果未能解决你的问题,请参考以下文章

浅谈数论

浅谈密码学中数论基础

浅谈$NTT$

浅谈杜教筛

基础数论20170529_3 数论_gcd

常用初等数论小知识