同余初步,线性同余

对于整数而言:

模运算的性质

a    m o d    b = a − b ⌊ a b ⌋ a\;mod\;b=a-b\lfloor\frac a b\rfloor amodb=abba,对于负数也依然如此。
其中符号 ⌊        ⌋ \lfloor\;\;\;\rfloor 表示向下取整。

  1. (a%m+b%m)%m=(a+b)%m
    将a、b取模m分为倍数部分和余数部分,无论如何取模,倍数部分都不做贡献。性质显然成立。
  2. (a%m×b%m)%m=a×b%m
    取模运算的优先级定义为与乘除运算优先级相当,从左到右依次计算。
    将a、b取模m分为倍数部分和余数部分,无论如何取模,倍数部分都不做贡献。性质显然成立。
    或者将乘法变为若干次加法,也可以说明性质成立。

同余式的定义

对于a m o d mod mod m=b m o d mod mod m,我们称a、b在模m的意义下同余,即具有相同的余数。
记作 a ≡ b    ( m o d    m ) a \equiv b \;(mod\;m) ab(modm),简写成 a ≡ b a \equiv b ab

以下性质均在同一模数下成立:

  1. 由于模运算的性质: A ≡ a , B ≡ b ⇒ A ± B ≡ a ± b A\equiv a ,B \equiv b\Rightarrow A\pm B\equiv a\pm b Aa,BbA±Ba±b
  2. 因而有: A ≡ a ⇒ k ⋅ A ≡ k ⋅ a A\equiv a\Rightarrow k\cdot A\equiv k\cdot a AakAka
  3. 因而有: A ≡ a , B ≡ b ⇒ A B ≡ a b A\equiv a,B\equiv b\Rightarrow AB\equiv ab Aa,BbABab
    这是由于:
    A ≡ a ⇒ A B ≡ a B A\equiv a \Rightarrow AB\equiv aB AaABaB
    B ≡ b ⇒ a B ≡ a b B\equiv b \Rightarrow aB\equiv ab BbaBab
    QED.
  4. 进而有: A ≡ a ⇒ A k ≡ a k A\equiv a \Rightarrow A^k\equiv a^k AaAkak

显然有 a ≡ a a\equiv a aa,这说明,同一模数,模意义下可以自由地做加减乘法,也可以移项,移项要变号。

乘法逆元

模意义下是没有除法的,那么如何将 a x ≡ b ax\equiv b axb这个式子转化成 a ≡ b ⋅ y a\equiv b\cdot y aby的形式呢?

我们只需要找到 x − 1 x^{-1} x1,使得 x ⋅ x − 1 ≡ 1 x\cdot x^{-1}\equiv 1 xx11,然后在 a x ≡ b ax\equiv b axb乘上 x − 1 x^{-1} x1,就会有: a x ⋅ x − 1 ≡ b x − 1 ax\cdot x^{-1}\equiv bx^{-1} axx1bx1,即 a ≡ b x − 1 a\equiv bx^{-1} abx1

那么对于 x ⋅ x − 1 ≡ 1 x\cdot x^{-1}\equiv 1 xx11,就称 x x x x − 1 x^{-1} x1互为模 m m m时的乘法逆元。

显然逆元在模意义下是唯一的,因为若有 x ⋅ x − 1 ≡ 1 , x ⋅ x ′ − 1 ≡ 1 , x − 1 ≢ x ′ − 1 x\cdot x^{-1}\equiv 1,x\cdot {x'^{-1}}\equiv 1,x^{-1}\not\equiv{x'^{-1}} xx11,xx11,x1x1,则 x ⋅ x − 1 ≡ 1 ≡ x ⋅ x ′ − 1 x\cdot x^{-1}\equiv 1\equiv x\cdot {x'^{-1}} xx11xx1,则 x − 1 ≡ x ′ − 1 x^{-1}\equiv x'^{-1} x1x1,矛盾。

枚举一下就会发现, x x x m m m不一定会存在逆元。

计算乘法逆元

剩余系

剩余类(同余类)

给定一个正整数 m m m,把所有整数根据模 m m m的余数分为 [ 0 , m − 1 ] [0,m-1] [0,m1] m m m类,每一类 C r C_r Cr代表可以被表示为 p ⋅ m + r p\cdot m+r pm+r形式的数。

完全剩余系(完系)

从每个模 m m m剩余类中取出一个数字,构成一个大小为m的集合,称为模m的一个剩余系。

简化剩余系(缩系)

我们从每个余数与 m m m互质的剩余类中取出一个数字,构成一个大小为 φ ( m ) \varphi(m) φ(m)的集合,称为模m的一个既约剩余系(简化剩余系)。

显然既约剩余系中的每一个数都与 m m m互质,考虑 n = p ⋅ m + r n=p\cdot m+r n=pm+r,则有:
gcd ⁡ ( n , m ) = gcd ⁡ ( n % m , m ) = gcd ⁡ ( r , m ) = 1 \gcd(n,m)=\gcd(n\%m,m)=\gcd(r,m)=1 gcd(n,m)=gcd(n%m,m)=gcd(r,m)=1

欧拉定理

欧拉定理即为:
a φ ( m ) ≡ 1      ( m o d    m )        ( a ⊥ m ) a^{\varphi(m)}\equiv 1\;\;(mod\;m)\;\;\;(a\perp m) aφ(m)1(modm)(am)

这意味着: a φ ( m ) − 1 ⋅ a ≡ 1      ( m o d    m ) a^{\varphi(m)-1}\cdot a\equiv 1\;\;(mod\; m) aφ(m)1a1(modm)
也就是说: a − 1 ≡ a φ ( m ) − 1      ( m o d    m ) a^{-1}\equiv a^{\varphi(m)-1}\;\;(mod\;m) a1aφ(m)1(modm)

因此欧拉定理可以用来寻找逆元。

证明一下欧拉定理:
a a a表示模m的一个既约剩余系。 a i a_i ai表示取到其第i个元素。

首先证明: ∀ a i ∈ a , { a i ⋅ x ∣ x ∈ a } 也是模 m 的一个既约剩余系 \forall a_i\in a,\{a_i\cdot x|x\in a\}也是模m的一个既约剩余系 aia,{aixxa}也是模m的一个既约剩余系
先证明,集合 { a i ⋅ x ∣ x ∈ a } \{a_i\cdot x|x\in a\} {aixxa}的模意义下的元素是两两不同的:
假设有 a i ⋅ x ≡ a i ⋅ y      ( m o d    m ) ( x ≢ y ) a_i\cdot x\equiv a_i\cdot y\;\;(mod\;m)(x\not\equiv y) aixaiy(modm)(xy),那么根据我们下面说到的第三种求逆元的方法的理论,我们知道,必存在 a i a_i ai的逆元,因此 x ≡ y x\equiv y xy,矛盾。

接着证明, ∀ X ∈ { a i ⋅ x ∣ x ∈ a } : X ⊥ m \forall X\in\{a_i\cdot x|x\in a\}:X\perp m X{aixxa}:Xm,也就是集合中的每一个元素都与m是互质的。
这很显然,由于 a i ⊥ m , x ⊥ m a_i\perp m,x\perp m aim,xm,则两者都与m无公共因子,立即得出 a i ⋅ x ⊥ m a_i\cdot x\perp m aixm

那么我们证明了 ∀ a i ∈ a , { a i ⋅ x ∣ x ∈ a } 也是模 m 的一个既约剩余系 \forall a_i\in a,\{a_i\cdot x|x\in a\}也是模m的一个既约剩余系 aia,{aixxa}也是模m的一个既约剩余系
定义这个集合为 S S S

则有 ∏ a ≡ ∏ S      ( m o d    m ) \prod a\equiv \prod S\;\;(mod\;m) aS(modm)
S S S的每一个元素都可以提出一个 a i a_i ai,作为既约剩余系,它共有 φ ( m ) \varphi(m) φ(m)个元素:
∏ a ≡ a i φ ( m ) ∏ a      ( m o d    m ) \prod a\equiv a_i^{\varphi(m)}\prod a\;\;(mod\;m) aaiφ(m)a(modm)

仿照上面的证明,立即得知 ∏ a ⊥ m \prod a\perp m am,所以根据下文所说,我们知道存在逆元,可以除掉:

a i φ ( m ) ≡ 1      ( m o d    m ) a_i^{\varphi(m)}\equiv 1\;\;(mod\;m) aiφ(m)1(modm)

a i a_i ai是模m既约剩余系的任意一个元素,因此:
∀ x ⊥ m : x φ ( m ) ≡ 1      ( m o d    m ) \forall x\perp m:x^{\varphi(m)}\equiv 1\;\;(mod\;m) xm:xφ(m)1(modm)

可以先筛出欧拉函数值,然后 x φ ( m ) x^{\varphi(m)} xφ(m)可以用快速幂求。
时间复杂度O(n)~O(logn)

费马小定理

费马小定理说的是:
x p − 1 ≡ 1      ( m o d    p ) ( p ∈ P ) x^{p-1}\equiv 1\;\;(mod\;p)(p\in\mathbb{P}) xp11(modp)(pP)

因此费马小定理也可以用来求逆元:
x p − 2 ≡ x − 1      ( m o d    p ) x^{p-2}\equiv x^{-1}\;\;(mod\;p) xp2x1(modp)

费马小定理是欧拉定理的特殊情况,带入 φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p1立即得到费马小定理。

费马小定理常用快速幂求逆元。

时间复杂度O(logn)

同余方程转不定方程,Exgcd求乘法逆元

注意到同余方程 x ⋅ x − 1 ≡ 1      ( m o d    m ) x\cdot x^{-1}\equiv 1\;\;(mod\;m) xx11(modm)实际上等于相当于不定方程
x ⋅ x − 1 + m ⋅ y = 1 x\cdot x^{-1}+m\cdot y=1 xx1+my=1,其中 x , m x,m x,m是常数, x − 1 , y x^{-1},y x1,y是未知数,均为整数。

那么存在逆元相当于此不定方程有整数解,也即 gcd ⁡ ( x , m ) ∣ 1 \gcd(x,m)|1 gcd(x,m)∣1,则 gcd ⁡ ( x , m ) = 1 \gcd(x,m)=1 gcd(x,m)=1,即 x ⊥ m x\perp m xm时存在逆元。

因此可以用exgcd求出 x − 1 x^{-1} x1,即为逆元。

求解一次同余方程

含有未知数的同余式称为同余方程。

对于一元一次同余方程 a x ≡ b      ( m o d    m ) ax\equiv b\;\;(mod\;m) axb(modm),有以下两种解法:

  1. 同余方程转不定方程:
    此同余方程等价于不定方程 a x + m y = b ax+my=b ax+my=b,可以用exgcd求解。
    同时我们得到了同余方程有解的充分必要条件: gcd ⁡ ( a , m ) ∣ b \gcd(a,m)|b gcd(a,m)b
  2. 乘法逆元:
    a ⊥ m a\perp m am,则存在 a a a在模 m m m意义下的乘法逆元,可立即得出 x ≡ b ⋅ a − 1 x\equiv b\cdot a^{-1} xba1
  3. 技巧做法:
    首先注意到 a x ≡ b ( m o d b ) ⇔ a x + m y = b ax\equiv b\pmod b\Leftrightarrow ax+my=b axb(modb)ax+my=b
    gcd ⁡ ( a , m ) = g \gcd(a,m)=g gcd(a,m)=g,若 g ∣ b g|b gb有解,否则无解。
    因此不定方程两边同时除以 g g g
    a g ⋅ x + m y g = b g \frac{a}g\cdot x+\frac{my}g=\frac bg gax+gmy=gb
    这意味着同余方程也可以同除以 g g g
    a g ⋅ x ≡ b g ( m o d m g ) \frac a g\cdot x\equiv \frac b g\pmod {\frac mg} gaxgb(modgm)
    (随便说一句,既然可以同时除,那么就可以同时乘对吧.)
    此时 a g ⊥ m g \frac a g\perp\frac mg gagm,除过来:
    x ≡ b g ⋅ ( a g ) − 1 x\equiv \frac bg\cdot\left(\frac ag\right)^{-1} xgb(ga)1
    由于这种方法需要求逆元,因此实用性不足(这要求筛出欧拉函数,或要求 m g \frac m g gm为质数,但事实上, m g \frac mg gm不一定为质数),但是它具有很大的启发性。

这说明单个同余方程的解满足形式:
x ≡ x 0        ( m o d    m g c d ( a , m ) ) x\equiv x_0\;\;\;\left(mod\;{\frac m{gcd(a,m)}}\right) xx0(modgcd(a,m)m)
x 0 ≡ b g ⋅ ( a g ) − 1        ( m o d    m g c d ( a , m ) ) x_0\equiv \frac bg \cdot\left(\frac ag\right)^{-1}\;\;\;\left(mod\;{\frac m{gcd(a,m)}}\right) x0gb(ga)1(modgcd(a,m)m)

批量求逆元

模m

计算 { 1 , 2 , . . . , m − 2 , m − 1 } \{1,2,...,m-2,m-1\} {1,2,...,m2,m1}模m的乘法逆元:

k ! = k × ( k − 1 ) × ( k − 2 ) . . . × 2 × 1 k!=k\times(k-1)\times(k-2)...\times 2\times 1 k!=k×(k1)×(k2)...×2×1
( k − 1 ) ! − 1 ≡ k ! − 1 ⋅ k (k-1)!^{-1}\equiv k!^{-1}\cdot k (k1)!1k!1k k − 1 ≡ ( k − 1 ) ! × k ! − 1 k^{-1}\equiv (k-1)!\times k!^{-1} k1(k1)!×k!1,只需要求 n ! − 1 n!^{-1} n!1

模质数M

计算 { 1 , 2 , . . . , M − 2 , M − 1 } \{1,2,...,M-2,M-1\} {1,2,...,M2,M1}模质数M的乘法逆元:

其中 1 − 1 ≡ 1 1^{-1}\equiv 1 111,对于 x ≥ 2 x\geq 2 x2,有:
⌊ M x ⌋ ⋅ x + M % x ≡ M ≡ 0 ( m o d M ) \left\lfloor\frac {M}{x}\right\rfloor\cdot x+M\%x\equiv M\equiv 0\pmod M xMx+M%xM0(modM)
则:
x ≡ − ( M % x ) ⌊ M x ⌋ − 1 ( m o d M ) x\equiv -\left(M\%x\right) \left\lfloor\frac {M}{x}\right\rfloor^{-1}\pmod M x(M%x)xM1(modM)
x − 1 ≡ ( − ( M % x ) ⌊ M x ⌋ − 1 ) − 1 ( m o d M ) x^{-1}\equiv \left(-\left(M\%x\right) \left\lfloor\frac {M}{x}\right\rfloor^{-1}\right)^{-1}\pmod M x1((M%x)xM1)1(modM)

我们知道 ( x y ) − 1 ≡ x − 1 y − 1 (xy)^{-1}\equiv x^{-1}y^{-1} (xy)1x1y1,还知道 ( − 1 ) − 1 ≡ 1 (-1)^{-1}\equiv 1 (1)11,还知道 ( x − 1 ) − 1 ≡ x \left({x^{-1}}\right)^{-1}\equiv x (x1)1x,因此:
x − 1 ≡ − ( M % x ) − 1 ⌊ M x ⌋ ( m o d M ) x^{-1}\equiv -\left(M\%x\right)^{-1} \left\lfloor\frac {M}{x}\right\rfloor\pmod M x1(M%x)1xM(modM)

M % x M\%x M%x的逆元早就求出来了,因此是可以做的。

inv[0]=inv[1]=1;
for(int i=2;i<=N;i++) (inv[i]=(M-1)*(M/i)%M*inv[M%i])%=M;
	

互为逆元

对于 m ⊥ x m\perp x mx,则存在逆元:
x ⋅ x − 1 ≡ 1 ( m o d m ) x\cdot x^{-1}\equiv 1\pmod m xx11(modm)

因此同余方程转不定方程:
x ⋅ x − 1 + m ⋅ y = 1 x\cdot x^{-1}+m\cdot y=1 xx1+my=1

最后求出的 x − 1 x^{-1} x1即为 x x x m m m的逆元,那么求出的 y y y是什么呢?

不难发现, y ≡ m − 1 ( m o d x ) y\equiv m^{-1}\pmod x ym1(modx)

这个现象本身就十分有趣了,且在一种中国剩余定理的方法内会用到。

事实上,这还有个高级版本:
x ⋅ x − 1 + y ⋅ y − 1 = c x\cdot x^{-1}+y\cdot y^{-1}=c xx1+yy1=c

则:
x ⋅ x − 1 ≡ c ( m o d y ) x\cdot x^{-1}\equiv c\pmod y xx1c(mody)
y ⋅ y − 1 ≡ c ( m o d x ) y\cdot y^{-1}\equiv c\pmod x yy1c(modx)
x ⋅ x − 1 ≡ c ( m o d y − 1 ) x\cdot x^{-1}\equiv c\pmod{y^{-1}} xx1c(mody1)
y ⋅ y − 1 ≡ c ( m o d x − 1 ) y\cdot y^{-1}\equiv c\pmod{x^{-1}} yy1c(modx1)

后记

于是皆大欢喜。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值