数论总结一

真·总结
从寒假到现在 慢慢补吧
数论小结一
【当时写在笔记本上 然后……没有然后了】
这里面的东西都是一些比较基础的

一 排列与组合 利用乘法原理
排列数:从n个对象中选m个排成一列的方案数
P(n,m)=n!/(n-m)!
组合数:从n个对象中选m个的方案数
C(n,m)=n!/(m!*(n-m)!)
递推:C(n,m)=C(n-1,m-1)+C(n-1,m)
可重排列:n!/(n1!n2!…*ni!) 其中n表示总数,n1,n2,…,ni表示每种数量)
循环排列:(n-1)!
夹棍法(不区分球,区分盒子)C(n+m-1,m) n为球数,m为盒子数

二 最大公约数
性质:1.gcd(a,b)=gcd(b,a)
2.gcd(a,0)=a
3.gcd(a,b)=gcd(a,b+k*a)
4.gcd(a,b)=gcd(a,b%a)//辗转相除法,也是我们一般求gcd的方法
5.a*b=gcd(a,b)*lcm(a,b)
//所以由5有一个求lcm的扩展:lcm(a,b)=a*b/gcd(a,b)

辗转相除法的证明
即证明gcd(a,b)=gcd(b,a%b):
1.由左边推到右边:
令a=kb+r,r=a%b,
设d为a、b的一个公约数,则d|a,d|b
因为r=a-kb,所以d|r 所以d是(b,a%b)的公约数

2.由右边推到左边:
设d为b,a%b的公约数,则d|b,d|r
因为a=kb+r,所以d|a,所以d为(a,b)的公约数
代码如下:

inline int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

三 扩展欧几里得
内容:存在整数x,y 使得gcd(a,b)=a*x+b*y

求解方法(分类讨论)
设a>b
1.b=0时,gcd(a,b)=a,x=1,y=0;
2.a>b>0时
ax1+by1=gcd(a,b)
bx2+(a%b)y2=gcd(b,a%b)
所以ax1+by1=bx2+(a%b)y2
因为a%b=a-(a/b)*b;
所以ax1+by1=a*y2+b*(x2-(a/b)*y2);
//(a/b)其实为向下取整
//这个可以由递归定义

代码:

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 t=x;x=y;y=t-a/b*y;
    return r;
}

扩展欧几里得的再扩展:
解二元一次不定方程
给定a,b 求ax+by=c的解的情况
依旧是分情况讨论 设d=gcd(a,b)
1.若d不整除于c,则无解
2.若d|c,则有无数组解
求解方法:
令d=gcd(a,b) 则可以根据扩展欧几里得,找到令p*a+q*b=d的一组解p0,q0
则其他整数解总满足:
p=p0+b/d *t,q=q0+a/d *t;
所以我们可找到一组解:
p1=p0*(c/d),q1=q0*(c/d);
其他解总满足
p=p1+b/d*t,q=q1+a/d*t;

bool modeq(int a,int b,int c,int &x,int &y){
    if(c%gcd(a,b)) return false;
    int d=gcd(a,b);
    a/=d,b/=d,c/=d;
    int x0,y0;
    exgcd(a,b,d,x0,y0);
    x=x0*(c/d);
    y=y0*(c/d);
    return 0;
}

//这个其实就是按照之前的过程具体实现,其实真正要写的时候用不着这么复杂

四 逆元
首先要知道同余
如果a,b对一个数m取余,余数相同,则称a,b同余于m
a≡b(mod m)<=>m|a-b
性质:
1.a≡b,b≡c => a≡c;
2.a≡b,c≡d => a+c≡b+d,a*c≡b*d;
3.若c为非零的整数 a≡b(mod m) <=> a*c≡b*c(mod mc)
4.a*c≡b*c(mod m) <=> a≡b(mod m/gcd(c,m))

对于逆元
定义:正整数a、m,若有a*x≡1(mod m) 那么把x的最小正整数解叫做a模m的逆元
求逆元的方法:

1.扩展欧几里得算法
若a与m互质,则满足存在x0,y0,使a*x0+m*y0=1
其中a*x0≡1(mod m)
……此处应该有代码

2.设逆元数组 inva[]
当a=1时,a的逆元为1
当a>=2时,0≡p≡a*q+r(mod p)(0<=r < a)
a的逆元≡-q*r的逆元(mod p)
inva[1]=1
inva[a]=(p-(p/a)*inva[p%d]%p)%p;//p/a依旧是向下取整

3.欧拉定理
a的φ(m)-1次方*a≡1 (mod m) 所以可推出逆元为a的φ(m)-1次方mod m
特别地,当m为质数时,由费马小定理 可推得逆元为a的m-2次方mod m

4.直接暴力枚举 for一遍
[我之前居然忘了写这个方法2333这个超级好用]
[沈阳集训Day2的第一题我就是这样做的23333本来是Lucas的直接被我逆元暴力水过去了。。。]

这个博客就放一些概念之类的好了,之后再补题吧[flag++]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值