同余&逆元简单总结

同余&逆元


1. 同余

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

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

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

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

○3. 传递性: a ≡ b ( m o d    m ) , b ≡ c ( m o d    m ) → a ≡ c ( m o d    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 ( m o d    m ) c ≡ d ( m o d    m ) → a + c ≡ b + d ( m o d    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 ( m o d    m ) c ≡ d ( m o d    m ) → a c ≡ b d ( m o d    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 ( m o d    m ) → a n ≡ b n ( m o d m ) a \equiv b (mod\;m) \rightarrow a^n \equiv b^n(mod m) ab(modm)anbn(modm)n是自然数

○7. 若 a ≡ b ( m o d    m ) , n ∣ m a \equiv b(mod\;m),n|m ab(modm),nm a ≡ b ( m o d    n ) a \equiv b(mod\;n) ab(modn)

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

○9. 若 ( m , n ) = 1 , a ≡ b ( m o d    m ) , a ≡ b ( m o d    n ) ⇔ a ≡ b ( m o d    m n ) (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. 求解线性同余方程 a x ≡ c ( m o d    b ) ax≡c(mod\;b) axc(modb)

可转化为求解方程: a x + b y = c ax+by=c ax+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.第二步:求解同余方程: a x ≡ g c d ( a , b ) ( m o d b ) ax≡gcd(a,b)(mod b) axgcd(a,b)(modb) a x + b y = g c d ( 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 = g c d ( a , b ) ∗ x a&#x27;x+b&#x27;y=gcd(a,b)*x ax+by=gcd(a,b)x
x = 1 , y = 0 x=1,y=0 x=1,y=0即得最后的一组解。
考虑从后往前推出 a x + b y = c ax+by=c ax+by=c的解:
设我们前一步求出的解为 x 1 , y 1 , 此 时 a , b 的 值 就 表 示 为 a , b , 当 前 的 解 表 示 为 x , y x_1,y_1,此时a,b的值就表示为a,b,当前的解表示为x,y x1,y1,a,ba,b,x,y
那么因为 g c d ( a , b ) = g c d ( b , a gcd(a,b)=gcd(b,a gcd(a,b)=gcd(b,a% b ) , a b),a b),a% b = a − ( a / b ) ∗ b b=a-(a/b)*b b=a(a/b)b有: b ∗ x 1 + ( a − ( a / b ) ∗ b ) y 1 = g c d ( a , b ) b*x_1+(a-(a/b)*b)y_1=gcd(a,b) bx1+(a(a/b)b)y1=gcd(a,b)
则:
b ∗ x 1 + ( a − ( a / b ) ∗ b ) y 1 = a x + b y b*x_1+(a-(a/b)*b)y_1=ax+by bx1+(a(a/b)b)y1=ax+by
整理得:
a y 1 + b ( x 1 − ( a / b ) y 1 ) = a x + b y ay_1+b(x_1-(a/b)y_1)=ax+by ay1+b(x1(a/b)y1)=ax+by
容易看出:
x = y 1 , y = x 1 − ( a / b ) y 1 x=y_1,y=x_1-(a/b)y_1 x=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 ≡ a 1 ( m o d &ThickSpace; m 1 ) x ≡ a 2 ( m o d &ThickSpace; m 2 ) x ≡ a 3 ( m o d &ThickSpace; m 3 ) … … … x ≡ a n ( m o d &ThickSpace; m n ) \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)
其中 ( m 1 &ThickSpace; m 2 &ThickSpace; m 3 … m n (m_1\;m_2\;m_3\dots m_n (m1m2m3mn两两互质 ) ) )
为了方便表示,将x设为S
(1)设 M = Π i = 1 n m i M=\Pi^n_{i=1}m_i M=Πi=1nmi, 设 M i = M / m i M_i=M/m_i M

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值