数论基础

互素

互质是公约数只有1的两个整数,叫做互质整数。

整除

若 a 和 b 都为整数,a 整除 b(b 被 a 整除),记为 a|b。(既b/a=0)
性质:
1.若a|b,对于任意非零整数m,有am|bm.
2.若a|b,且b|c,则a|c.
3.若a| bc,且a和 c 互素,则 a | b (因为 c/a!=0,所以必定是b/a=0)
4.若 c|a,且c | b,对于任意整数m,n,有 c |(ma+nb)

素数

素数(质数),大于1的自然数中,除了1和它本身外没有其他因数的自然数;其它的数称为合数;1即非素数也非合数

当x很大时,小于x的素数的个数近似等于 x/lnx 。

因数

因数(约数),对于整数啊,存在整数b,使得b | a ,则称为b为a的因数

因数分解

对于每个整数n,斗可以唯一的分解为素数的乘积。
在这里插入图片描述
可以将相同的素数合并,用素数幂的乘积表示。
在这里插入图片描述

模运算

对于整数,给定一个整数b,有a=kb+r,定义r为 a/b 的余数,a%b=r, 或 a mod b=r;

加法:(a +b)%c = (a%c + b%c)%c
减法:(a -b)%c = (a%c - b%c)%c
乘法:(a *b)%c = (a%c * b%c)%c
除法 ???:(a /b)%c = (a%c / b%c)%c 除法的模运算不这么做,用逆元做(后面会说到)

同余

如果 a 和 b 除于 c 的余数相同,那么称 a 和 b 关于
模 c 同余,表示为 a ≡ b ( mod c) (即a%c=b%c)

对称性:a ≡ b ( mod c) = b≡ a ( mod c)
传递性 :a ≡ b ( mod m),b ≡ c( mod m) 可得 a ≡ c ( mod m)

逆元

对于实数A,如果存在一个X,使得 Ax =1,则 把 x叫做 A的逆元,记作 x=A-1

数论逆元

如果一个数字A存在一个对于p的逆元x,就可以表示为 Ax≡ 1 (mod p) 的形式
(要求A和P互质,否则不存在逆元)

(a/b) %c =(a*b-1 )%c=(a%c * b-1 %c)%c

最大公约数(gcd)

指两个或多个整数的共同因数中最大的一个。
若整数a,b的最大因数为c,记为gcd(a,b)=c

gcd(a,b)=gcd(b,a)
gcd(1,n)=1
gcd(0,n)=n

最小公倍数(lcm)

指两个或多个整数的共同倍数中最小的一个。
若整数 a、b 的最小公倍数为 c,记为 lcm(a, b) = c。
a * b = lcm(a, b) * gcd(a, b)

欧几里得算法(辗转相除法)

辗转相除法,又名欧几里得算法,是求最大公约数的一种方法。
过程:用较大数除以较小数,如果余数不是0,将较小数的数值付给较大数,将余数的数值付给较小数,再用较大数除以较小数。如此反复,直到最后余数是0为止。如果是求两个数的最大公约
数,那么最后的除数就是这两个数的最大公约数。

LL gcd(LL a,LL b){
    return b==0? a:gcd(b,a%b);
}
最小公倍数
LL lcm(LL a,LL b){
     return  a*b/gcd(a,b);
}

求解逆元

费马小定理

假设 p是一个质数,且 gcd(a, p) =1,有ap-1 ≡ 1(mod p)
所以可以得到 a* ap-2 ≡ 1 (mod p)
对比逆元定义式 Ax≡ 1(mod p)
a-1 =ap-2

扩展欧几里得算法

裴蜀定理:对于两个整数a,b,若存在整数 x ,y
使ax+by=c 有解,当且仅当 c为gcd(a,b) 的整倍数。若裴蜀等式有解,必有无穷多对解。
推广到 n 个时:对于 n 个整数 a1,a2,… an,若
存在 x1、x2 、…xn ,使a1x1+a2x2+……+anxn=c
成立,当且仅当 c为gcd(a1,a2,……an) 的整倍数。

Ax ≡ 1(mod p) 可推得 Ax=1+kp( 因为 Ax%p=1%p,Ax=kp+Ax%p=kp+1)
所以Ax+kp=1 (Ax+(-k)p=1) 所以Ax+kp=gcd(A,p) 当A与p互质时才存在逆元 (p不一定是质数)
最后得到了形似裴蜀等式ax+by=c的式子
求解上式的x和k。其中x为A的关于p的逆元
最后的问题就变成了如何求解ax+by=gcd(a,b)
数论逆元有无穷个,我们只需求出一个特解x

根据欧几里得算法可知gcd(a,b)=gcd(b,a%b)
令bx+(a%b)y=gcd(b,a%b)
所以可得ax+by=bx’+(a%b)y’
因为a%b=a-(a/b)*b
化简得 ax+by=bx’+(a%b)y’
ax+by=bx’+(a-(a/b)b)y’
ax+by=bx’+ay’-(a/b)by’
ax+by=ay’+b(x’-(a/b)y’)
解得 x=y’ y=x’-(a/b)y’

gcd(a,b)=gcd(b,a%b)
ax+by=bx’+(a%b)y’
因为基于欧几里得算法,使用递归求解,因此在递归终点也会出现b=0
ax+by=gcd(a,b),b=0
ax=gcd(a,0)可得 x=1,y=0
然后再通过x=y’ y=x’-(a/b)y’ 递推回去,
最后求得的x就是A关于p的逆元


int exgcd(int a,int b,int &x,int &y)//扩展欧几里得算法
{
    if(b==0)
    {
        x=1;y=0;
        return a;  //到达递归边界开始向上一层返回
    }
    int r=exgcd(b,a%b,x,y);
    int temp=y;    //把x y变成上一层的
    y=x-(a/b)*y;
    x=temp;
    return r;     //得到a b的最大公因数
 }

最后的x=(x+p)%p 因为可能溢出

欧拉函数

欧拉函数表示小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LL phi(LL x){
LL phi=x;
        for(int pi=2;pi<=x;pi++){
           if(x % pi ==0){
             phi=(phi/pi)*(pi-1);
             while(x%pi==0) x/=pi;
           }
        }
        return phi;
 }
用欧拉筛打表的欧拉函数
for(int i=1;i<maxn;i++)
    phi[i]=i;
for(int i=2;i<maxn;i++){
	if(phi[i]==i){
    	for(int j=i;j<maxn;j+=i){
		    phi[j]=phi[j]/i*(i-1);
		}
    }
}   

欧拉定理

在这里插入图片描述
对于任意互质的 a 和 n,有 aφ(n) ≡ 1 mod n 。
在这里插入图片描述

扩展欧拉定理

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值