浅谈数论
Posted maoyingcheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈数论相关的知识,希望对你有一定的参考价值。
逆元
- 逆元是一个非常牛逼的东西。求法很多,又很实用。
- 它可以分为乘法逆元和加法逆元:
-
乘法逆元:如果ab==1(mod p)则我们称b是a关于p的(乘法)逆元;
-
加法逆元:如果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)可得:
- a^(p-2)==a^-1(mod p)咋一看发现这个式子貌似是乘法逆元,所以说我们多了一种求逆元的方法qaq;
-
这里千万注意gcd(a,p)=1
欧拉函数
- phi(n)我们将其定义为n的完全剩余系中与n互质的数的个数
- 我们现将求法说一下(名字是作者瞎起的)
- 分解质因数法:我们先求出n的质因数p1~pk,则phi(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pk)即可,相信正确性是有保证的
- 欧拉筛法:
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];
- 暴力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]]
欧拉是个伟人!
中国剩余定理
以上是关于浅谈数论的主要内容,如果未能解决你的问题,请参考以下文章