码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈数论

时间:2019-07-28 14:11:49      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:时间   等于   分解质因数   else   alt   one   event   质因数   inline   

逆元

  • 逆元是一个非常牛逼的东西。求法很多,又很实用。
  • 它可以分为乘法逆元和加法逆元:
  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

欧拉是个伟人!


 

中国剩余定理

 

浅谈数论

标签:时间   等于   分解质因数   else   alt   one   event   质因数   inline   

原文地址:https://www.cnblogs.com/maoyingcheng/p/11255874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!