同余&逆元
1. 同余
1. 同余的基本概念及性质
- 若xxx%m=am=am=a即m是 x-a 的一个因子, 则称x与a关于m同余,记作:x≡a(mod  m)x \equiv a(mod \;m)x≡a(modm)
- 同余基本性质:
○1. 自反性:a≡a(mod  m)a \equiv a(mod\;m)a≡a(modm)
○2. 对称性:a≡b(mod  m)→b≡a(mod  m)a \equiv b(mod\;m) \rightarrow b \equiv a(mod\;m)a≡b(modm)→b≡a(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)a≡b(modm),b≡c(modm)→a≡c(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)a≡b(modm)c≡d(modm)→a+c≡b+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)a≡b(modm)c≡d(modm)→ac≡bd(modm)
○6. 同幂性:a≡b(mod  m)→an≡bn(modm)a \equiv b (mod\;m) \rightarrow a^n \equiv b^n(mod m)a≡b(modm)→an≡bn(modm)n是自然数
○7. 若a≡b(mod  m),n∣ma \equiv b(mod\;m),n|ma≡b(modm),n∣m 则 a≡b(mod  n)a \equiv b(mod\;n)a≡b(modn)
○8. 若ac≡bc(mod  m),(c,m)=dac \equiv bc(mod\;m),(c,m)=dac≡bc(modm),(c,m)=d则a≡b(mod  md)a \equiv b(mod\;\dfrac{m}{d})a≡b(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,a≡b(modm),a≡b(modn)⇔a≡b(modmn)
2. 求解线性同余方程 ax≡c(mod  b)ax≡c(mod\;b)ax≡c(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)ax≡gcd(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'x+b'y=gcd(a,b)*xa′x+b′y=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,b的值就表示为a,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)b∗x1+(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+byb∗x1+(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  m1)x≡a2(mod  m2)x≡a3(mod  m3)………x≡an(mod  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} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x≡a1(modm1)x≡a2(modm2)x≡a3(modm3)………x≡an(modmn)
其中(m1  m2  m3…mn(m_1\;m_2\;m_3\dots m_n(m1m2m3…mn两两互质)))
为了方便表示,将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

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

被折叠的 条评论
为什么被折叠?



