2021-08-14 【基础数论】

-5 mod 3 = -2 :这是因为在a,p异号的时候,c++遵循使商尽可能大的原则,选取了-1作为商。所以我们平时计算减法时,为防止要取mod的数字为负数,多加上一个p:

(a - b ) % p = ( ( a % p ) - ( b % p ) + p ) % p;


[](()同余


a%b==c%b 可以说a≡c(mod b);a,c对mod b同余

第二定义:若 m | ( a-b ),a,b对mod m同余

性质:

(1)若a≡b(mod m),则(a,m)=(b,m) [欧几里得算法]

(2)若a≡b(mod m),则_ak_≡bk(mod m)

(3)若a≡b(mod m),且a=a|d,b=b|d, (d,m)=1,则ad≡bd(mod m);


[](()同余式


若用f(x)表示系数为整数的多项式,又设m是一个正整数,则f(x)≡0(mod m)叫做模m的同余式。

//ax+by=gcd(a,b)

一次同余式:ax≡b(mod m) 使同余式成立的_x_叫做该式的一个解

ax≡b(mod m) 与ax+my=b等价

定理1:一次同余式(又叫线性同余方程)有解的充要条件是 (a,m)|b。

证:

​ 一次同余式可写成:ax=my+b => ax-my=b

​ 因y无关紧要,令y=-y,得ax+my=b => (a,m)|b [裴蜀定理];

​ 证毕;

定理2:若gcd(a,b)=1 ,且 x0、y0 为方程 ax+by=c 的一组解,则该方程的任意解可表示为:x=x0+bt,y=y0-at, 且对任意整数 t 都成立。

根据定理 2,可以求出方程的所有解。但在实际问题中,我们往往被要求求出一个最小整数解,也就是一个特解x=(x mod t + t ) mod t ,其中 t=( b / gcd(a,b))


[](()逆元(Day 1 )


方程ax≡1(mod m)的一个解x,称为x为a模m的逆。

//(a,m)=1;

设k是b的逆元 <=> bk mod m = 1;

在这里插入图片描述

逆元的求法

(1)拓展欧几里得解方程

exgcd是求解不定方程ax+by=c的解,由逆元定义,a*inv(a)≡1(mod m)

即a* inv(a)+m*y=1的方程的解,由于a,m已知,根据exgcd可求出inv(a)

只有gcd(a,m)=1时,才有逆元

int exgcd(int a,int b,int &x,int &y){

if(b==0) {

x=1;

y=0;

return a;

}

int d=exgcd(b,a%b,x,y);

int temp=x;

x=y;

y=temp-a/b*y;

return d;

}

int getinv(int a,int mod){//a在mod下的逆元

int x,y;

int d=exgcd(a,mod,x,y);

return d==1?(x%mod+mod)%mod:-1;

}

(2)费马小定理:p是素数,gcd(a,p)=1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nR9oZTF3-1628948300606)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20210813173748153.png)]

int quickpow(int a,int p,int mod){//快速幂</

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值