同余&逆元简单总结

本文详细介绍了同余的基本概念、性质及其在解决线性同余方程、中国剩余定理等方面的应用。此外,还探讨了逆元的概念,包括如何求解逆元,以及逆元在线性递推、扩展欧几里得算法和费马小定理中的作用。通过这些理论,可以解决复杂的模算术问题。

同余&逆元


1. 同余

1. 同余的基本概念及性质

  1. xxx%m=am=am=a即m是 x-a 的一个因子, 则称x与a关于m同余,记作:x≡a(mod  m)x \equiv a(mod \;m)xa(modm)
  2. 同余基本性质:

○1. 自反性:a≡a(mod  m)a \equiv a(mod\;m)aa(modm)

○2. 对称性:a≡b(mod  m)→b≡a(mod  m)a \equiv b(mod\;m) \rightarrow b \equiv a(mod\;m)ab(modm)ba(modm)

○3. 传递性:a≡b(mod  m),b≡c(mod  m)→a≡c(mod  m)a \equiv b(mod\;m),b \equiv c(mod\;m) \rightarrow a \equiv c(mod\;m)ab(modm),bc(modm)ac(modm)

○4. 同加性:a≡b(mod  m)c≡d(mod  m)→a+c≡b+d(mod  m)a \equiv b(mod\;m) c \equiv d(mod\;m) \rightarrow a+c \equiv b+d(mod\;m)ab(modm)cd(modm)a+cb+d(modm)

○5. 同乘性:a≡b(mod  m)c≡d(mod  m)→ac≡bd(mod  m)a \equiv b(mod\;m) c \equiv d(mod\;m) \rightarrow ac \equiv bd(mod\;m)ab(modm)cd(modm)acbd(modm)

○6. 同幂性:a≡b(mod  m)→an≡bn(modm)a \equiv b (mod\;m) \rightarrow a^n \equiv b^n(mod m)ab(modm)anbn(modm)n是自然数

○7. 若a≡b(mod  m),n∣ma \equiv b(mod\;m),n|mab(modm),nma≡b(mod  n)a \equiv b(mod\;n)ab(modn)

○8. 若ac≡bc(mod  m),(c,m)=dac \equiv bc(mod\;m),(c,m)=dacbc(modm),(c,m)=da≡b(mod  md)a \equiv b(mod\;\dfrac{m}{d})ab(moddm)

○9. 若(m,n)=1,a≡b(mod  m),a≡b(mod  n)⇔a≡b(mod  mn)(m,n)=1,a \equiv b(mod\;m),a \equiv b(mod\;n) \Leftrightarrow a \equiv b(mod\;mn)(m,n)=1,ab(modm),ab(modn)ab(modmn)

2. 求解线性同余方程 ax≡c(mod  b)ax≡c(mod\;b)axc(modb)

可转化为求解方程: ax+by=cax+by=cax+by=c
(同余方程和线性方程的关系很重要,经常用到!!)
1.预处理:

	if(a<0) a=-a,c=-c;
	while(c<0) c+=b;//保证 a,c 为正

2.第一步: 检验是否有解

	int gcd=Gcd(a,b);
	if((c%gcd)!=0) return -1;//若c不是gcd(a,b) 的倍数,则无解
	//可以转化为直线上的整点来理解

3.第二步:求解同余方程:ax≡gcd(a,b)(modb)ax≡gcd(a,b)(mod b)axgcd(a,b)(modb)ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)
扩展欧几里得算法

inline int ex_gcd(int a,int b)
{
   
   
	if(b==0) {
   
   x=1;y=0;return a;}
	int gcd=ex_gcd(b,a%b);
	int tmp=x;x=y;
	y=tmp-a/b*y;//扩欧
	return gcd;
}
//最后得到的x即为原同余方程的一个可行解;

扩欧的证明:
当最后 b’==0 时a’==gcd(a,b) 则此时 a′x+b′y=gcd(a,b)∗xa&#x27;x+b&#x27;y=gcd(a,b)*xax+by=gcd(a,b)x
x=1,y=0x=1,y=0x=1,y=0即得最后的一组解。
考虑从后往前推出ax+by=cax+by=cax+by=c的解:
设我们前一步求出的解为x1,y1,此时a,b的值就表示为a,b,当前的解表示为x,yx_1,y_1,此时a,b的值就表示为a,b,当前的解表示为x,yx1,y1,a,ba,b,x,y
那么因为gcd(a,b)=gcd(b,agcd(a,b)=gcd(b,agcd(a,b)=gcd(b,a%b),ab),ab),a%b=a−(a/b)∗bb=a-(a/b)*bb=a(a/b)b有:b∗x1+(a−(a/b)∗b)y1=gcd(a,b)b*x_1+(a-(a/b)*b)y_1=gcd(a,b)bx1+(a(a/b)b)y1=gcd(a,b)
则:
b∗x1+(a−(a/b)∗b)y1=ax+byb*x_1+(a-(a/b)*b)y_1=ax+bybx1+(a(a/b)b)y1=ax+by
整理得:
ay1+b(x1−(a/b)y1)=ax+byay_1+b(x_1-(a/b)y_1)=ax+byay1+b(x1(a/b)y1)=ax+by
容易看出:
x=y1,y=x1−(a/b)y1x=y_1,y=x_1-(a/b)y_1x=y1,y=x1(a/b)y1
即证。

4.第四步:根据题意得出答案

若要求出最小正整数解:

    while(x<0) x+=b;x%=b;
	b/=gcd;//mod 要变成 mod/gcd ;(mod 即为 b)
	x=x*c/gcd;//同余的同乘性质
    while(x<0) x+=b;x%=b;//最小正整数解

若要求出解的个数(或所有解)

    int tot=gcd(a,b);// 只有gcd(a,b) 个解
    //要求出每个解,只需对其不断加 b/gcd 即可(同时y-=a/gcd)

3.求解单变量模线性方程组(中国剩余定理)

有如下方程:
{ x≡a1(mod&ThickSpace;m1)x≡a2(mod&ThickSpace;m2)x≡a3(mod&ThickSpace;m3)………x≡an(mod&ThickSpace;mn)\begin{cases} x \equiv a_1 (mod\;m_1)\\ x \equiv a_2 (mod\;m_2)\\ x \equiv a_3 (mod\;m_3)\\ \dots\dots \dots\\ x \equiv a_n (mod\;m_n)\\ \end{cases} xa1(modm1)xa2(modm2)xa3(modm3)xan(modmn)
其中(m1&ThickSpace;m2&ThickSpace;m3…mn(m_1\;m_2\;m_3\dots m_n(m1m2m3mn两两互质)))
为了方便表示,将x设为S
(1)设M=Πi=1nmiM=\Pi^n_{i=1}m_iM=Πi=1nmi, 设Mi=M/miM_i=M/m_iMi=M/mi
(2)可知对于每一个i有:(Mi,mi)=1i有:(M_i,m_i)=1i:(Mi,mi)=1
即:
Mix+miy=1\qquad\qquad\qquad\qquad\qquad M_ix+m_iy=1Mi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值