数论基础(坑)

作者的话:
在标题的"(坑)"删除前,谢绝转载。因为还会更新。
这是一篇从初中写到高中的文章,由于水平有限,如有错误请指出,谢谢!
本文将力图理性地证明所有定理(除非太过于显然的定理)

定义

数论 数论是纯粹数学的分支之一,主要研究 整数 的性质。
连加  a 1 + a 2 + . . . + a n = ∑ i = 1 n a i \begin{aligned}a_1+a_2+...+a_n=\sum\limits_{i=1}^{n}a_i\end{aligned} a1+a2+...+an=i=1nai
连乘  a 1 × a 2 × . . . × a n = ∏ i = 1 n a i \begin{aligned}a_1\times a_2\times...\times a_n=\prod\limits_{i=1}^{n}a_i\end{aligned} a1×a2×...×an=i=1nai
全称量化  ∀   1 ⩽ i ⩽ n , i 2 ≠ 0 ⇔ \forall\ 1\leqslant i\leqslant n,i^2\not=0⇔  1in,i2=0 对于所有满足 1 ⩽ i ⩽ n 的  i 1\leqslant i\leqslant n的\ i 1in i,满足 i 2 ≠ 0 i^2\not=0 i2=0

集合

  1. R R R 实数集合
  2. Q Q Q 有理数集合
  3. Z Z Z 整数集合
  4. N N N 自然数集合
  5. N ∗ N^* N 正整数集合
  6. p r i m e prime prime 质数集合
  7. a ∈ B ⇔ a a\in B ⇔a aBa 属于集合 B B B
  8. a ∉ B ⇔ a a\not\in B ⇔a aBa 不属于集合 B B B
  9. { x 2 ∣ 1 ⩽ x ⩽ n , x ∈ p r i m e } \{x^2|1\leqslant x\leqslant n,x\in prime\} {x2∣1xn,xprime}
    ⇔ ⇔ 满足 1 ⩽ x ⩽ n , x ∈ p r i m e 1\leqslant x\leqslant n,x\in prime 1xn,xprime 的所有 x 2 x^2 x2 组成的集合
    ⇔ ⇔ " 1 1 1 n n n 中所有质数"的平方组成的集合
  10. ∣ S ∣ ⇔ |S|⇔ S 集合 S S S 的大小

整除  a ∣ b ⇔ a a|b⇔a aba b b b 的约数
    a ∤    a\not|\; a b ⇔ a b⇔a ba 不是 b b b 的约数(由于\nmid( ∤ \nmid )不容易区分,这里用a\not|\;

最小公倍数  [ a , b ] = l c m ( a , b ) [a,b]=lcm(a,b) [a,b]=lcm(a,b)
最大公因数  ( a , b ) = g c d ( a , b ) (a,b)=gcd(a,b) (a,b)=gcd(a,b)

取整  ⌊ x ⌋ ⇔ x \lfloor x\rfloor⇔x xx 下取整
   ⌈ x ⌉ ⇔ x \qquad\ \ \lceil x\rceil⇔x   xx 上取整

同余  a ≡ b ( m o d m ) ⇔ a  mod  m = b  mod  m a≡b\pmod m⇔a\ \text{mod}\ m=b\ \text{mod}\ m ab(modm)a mod m=b mod m

逆元 若 a × a − 1 ≡ 1 ( m o d m ) a\times a^{-1}≡1\pmod m a×a11(modm),则 a − 1 a^{-1} a1 即为 a a a 的逆元。
定理 当且仅当 ( a , m ) ≠ 1 (a,m)\not=1 (a,m)=1 时,存在 a − 1 a^{-1} a1 使得 a × a − 1 ≡ 1 ( m o d m ) a\times a^{-1}≡1\pmod m a×a11(modm)
证明 若 ( a , m ) = d ≠ 1 (a,m)=d\not=1 (a,m)=d=1 ( a × a ′ )  mod  m = t \left(a\times a'\right)\ \text{mod}\ m=t (a×a) mod m=t a × a ′ + k × m = t a\times a'+k\times m=t a×a+k×m=t,则 t  mod  d = 0 t\ \text{mod}\ d=0 t mod d=0,因而 t ≠ 1 t\not =1 t=1,故不存在 a ′ a' a 使得 a × a − 1 ≡ 1 ( m o d m ) a\times a^{-1}≡1\pmod m a×a11(modm)。而当 ( a , m ) = 1 (a,m)=1 (a,m)=1 时,由欧拉定理(后文有证明), a φ ( m ) ≡ 1 ( m o d m ) a^{\varphi(m)}≡1\pmod m aφ(m)1(modm),因而 a × a φ ( m ) − 1 ≡ 1 ( m o d p ) a\times a^{\varphi(m)-1}≡1\pmod p a×aφ(m)11(modp),故 a − 1 ≡ a φ ( m ) ( m o d p ) a^{-1}≡a^{\varphi(m)}\pmod p a1aφ(m)(modp),证毕。

欧拉函数  φ ( n ) = \varphi(n)= φ(n)= 小于等于 n n n 且与 n n n 互质的数的个数。即 φ ( n ) = ∑ i = 1 n [ g c d ( i , n ) = 1 ] \begin{aligned}\varphi(n)=\sum\limits_{i=1}^{n}[gcd(i,n)=1]\end{aligned} φ(n)=i=1n[gcd(i,n)=1]定理 若 p ∈ p r i m e p\in prime pprime φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p1
证明 因为 p ∈ p r i m e p\in prime pprime,故 ∀ 1 ⩽ i < p , ( i , p ) = 1 \forall 1\leqslant i < p,(i,p)=1 ∀1i<p,(i,p)=1,得证。
积性函数 如果对于任意满足 p , q ∈ N ∗ , g c d ( p , q ) = 1 p,q\in N^*,gcd(p,q)=1 p,qN,gcd(p,q)=1 p p p q q q
  \,\qquad\qquad f ( q × p ) = f ( q ) × f ( p ) f(q\times p)= f(q)\times f(p) f(q×p)=f(q)×f(p) 均成立。则 f f f 是积性函数。

莫比乌斯函数  μ ( x ) = { 1 , x = 1 ( − 1 ) k , x = p 1 p 2 . . . p k ,   p i ≠ p j , p i ∈ p r i m e 0 , o t h e r s \mu(x)=\begin{cases}1,& x=1\\(-1)^{k},&x=p_1p_2...p_k,\ p_i\not=p_j,p_i\in prime\\0,& others\end{cases} μ(x)= 1,(1)k,0,x=1x=p1p2...pk, pi=pj,piprimeothers

模运算  a  mod  b = a − ⌊ a / b ⌋ × b a\ \text{mod}\ b=a-\lfloor a/b\rfloor\times b a mod b=aa/b×b,即 a a a b b b 的余数。
    这里引用C++的定义,即 a  mod  b ⇔ a % b a\ \text{mod}\ b⇔a\%b a mod ba%b

性质

整除的性质

  1. a ∣ c , b ∣ c , ( a , b ) = 1 ⇒ a b ∣ c a|c,b|c,(a,b)=1⇒ab|c ac,bc,(a,b)=1abc
  2. a ∣ b c , ( a , b ) = 1 ⇒ a ∣ c a|bc,(a,b)=1⇒a|c abc,(a,b)=1ac
  3. p ∣ a b ⇒ ( p ∣ a ) ∨ ( p ∣ b ) p|ab⇒(p|a)∨(p|b) pab(pa)(pb),其中 ∨ ∨ 表示逻辑或

同余的性质

  1. a ≡ b ( m o d m ) ⇔ m ∣ ( a − b ) a≡b\pmod m \Leftrightarrow m|(a-b) ab(modm)m(ab)

  2. a ≡ b ( m o d m ) ⇔ a − b ≡ 0 ( m o d m ) a≡b\pmod m \Leftrightarrow a-b≡0\pmod m ab(modm)ab0(modm)

  3. a ≡ b ( m o d m ) ⇔ a c ≡ b c ( m o d m ) a≡b\pmod m \Leftrightarrow ac≡bc\pmod m ab(modm)acbc(modm)

  4. ( c , p ) = 1 (c,p) = 1 (c,p)=1,则 a c ≡ b c ( m o d p ) ⇒ a ≡ b ( m o d p ) ac ≡ bc\pmod p ⇒ a ≡ b\pmod p acbc(modp)ab(modp)
    证明 由于 ( c , p ) = 1 (c,p)=1 (c,p)=1,必然存在 c − 1 c^{-1} c1 使得 c × c − 1 ≡ 1 ( m o d m ) c\times c^{-1}≡1\pmod m c×c11(modm)
       两边同乘 c − 1 c^{-1} c1 a c ⋅ c − 1 ≡ b c ⋅ c − 1 ( m o d p ) ⇒ a ≡ b ( m o d p ) ac\cdot c^{-1} ≡ bc\cdot c^{-1}\pmod p ⇒ a ≡ b\pmod p acc1bcc1(modp)ab(modp)

  5. a ≡ b ( m o d p ) , a c ≡ b d ( m o d p ) a≡b\pmod p,ac≡bd\pmod p ab(modp),acbd(modp) ,则 c ≡ d ( m o d p ) c≡d\pmod p cd(modp)

  6. a ≡ b ( m o d m ) , a ≡ b ( m o d n ) ⇒ a ≡ b ( m o d [ m , n ] ) a≡b\pmod m,a≡b\pmod n⇒a≡b\pmod{[m,n]} ab(modm),ab(modn)ab(mod[m,n])
    证明  ( a − b ) = x m = y n = k × [ m , n ] (a-b)=xm=yn=k\times [m,n] (ab)=xm=yn=k×[m,n]

  7. ( k , m ) = d , k × a ≡ k × a ′ ( m o d m ) ⇒ a ≡ a ′ ( m o d m d ) (k,m)=d,k\times a≡k\times a'\pmod m⇒a≡a'\pmod{\dfrac{m}{d}} (k,m)=d,k×ak×a(modm)aa(moddm)
    证明  ∵ ( k , m ) = d \because (k,m)=d (k,m)=d
        ∴ \therefore 必然存在 k k k m m m 使得 k = q × d , m = p × d k=q\times d,m=p\times d k=q×d,m=p×d
        ∴ k × a − k × a ′ = c × m \therefore k\times a-k\times a'=c\times m k×ak×a=c×m
        ∴ a − a ′ = c × m k = c × m q × d = c q × m d \therefore a-a'=c\times \dfrac{m}{k}=\dfrac{c\times m}{q\times d}=\dfrac{c}{q}\times \dfrac{m}{d} aa=c×km=q×dc×m=qc×dm

  8. a c ≡ b c ( m o d m ) ac≡bc\pmod m acbc(modm),且 ( c , m ) = d (c,m)=d (c,m)=d,则 a ≡ b ( m o d m d ) a≡b\pmod{\dfrac{m}{d}} ab(moddm)
    证明: ∵ a c ≡ b c ( m o d m ) \because ac≡bc\pmod m acbc(modm)
        ∴ m ∣ a c − b c \therefore m|ac-bc macbc
        ∴ m ∣ c ( a − b ) \therefore m|c(a-b) mc(ab)
       又 ( c , m ) = d (c,m)=d (c,m)=d
        ∴ m d ∣ c d ( a − b ) \therefore {\large\frac md|\frac cd} (a-b) dmdc(ab)
       又 ( c d , m d ) = 1 \left(\dfrac cd,\dfrac md\right)=1 (dc,dm)=1
        ∴ m d ∣ a − b \therefore {\large\frac md|}a-b dmab a ≡ b ( m o d m d ) a≡b\pmod{\dfrac{m}{d}} ab(moddm)

∑ \sum 的性质

∑ i ( ( ∑ j a j ) b i ) = ∑ i ( ∑ j ( a j b i ) ) = ∑ j ( a j ∑ i b i ) = ( ∑ i b i ) ( ∑ i a i ) \begin{aligned}&\sum_i\left(\left(\sum_j a_j\right)b_i\right)=\sum_i\left(\sum_j \left(a_jb_i\right)\right)\\=&\sum_j \left(a_j \sum_i b_i\right)=\left(\sum_ib_i\right)\left(\sum_ia_i\right)\end{aligned} =i((jaj)bi)=i(j(ajbi))j(ajibi)=(ibi)(iai)

证明 乘法分配律。示范:若 a = [ 1 , 2 , 3 ] , b = [ 4 , 5 , 6 ] a=[1,2,3],b=[4,5,6] a=[1,2,3],b=[4,5,6]
∑ i ( ( ∑ j a j ) b i ) = ( 1 + 2 + 3 ) ∗ 4 + ( 1 + 2 + 3 ) ∗ 5 + ( 1 + 2 + 3 ) ∗ 6 = 1 ∗ 4 + 2 ∗ 4 + 3 ∗ 4 + 1 ∗ 5 + 2 ∗ 5 + 3 ∗ 5 + 1 ∗ 6 + 2 ∗ 6 + 3 ∗ 6 = ∑ i ( ∑ j ( a j b i ) ) = ( 4 + 5 + 6 ) ∗ 1 + ( 4 + 5 + 6 ) ∗ 2 + ( 4 + 5 + 6 ) ∗ 3 = ∑ j ( a j ∑ i b i ) \begin{aligned}\sum_i\left(\left(\sum_j a_j\right)b_i\right)&=(1+2+3)*4+(1+2+3)*5+ (1+2+3)*6\\ &=1*4+2*4+3*4+1*5+2*5+3*5+1*6+2*6+3*6\\ &=\sum_i\left(\sum_j \left(a_jb_i\right)\right)\\ &=(4+5+6)*1+(4+5+6)*2+(4+5+6)*3\\ &=\sum_j \left(a_j \sum_i b_i\right)\end{aligned} i((jaj)bi)=(1+2+3)4+(1+2+3)5+(1+2+3)6=14+24+34+15+25+35+16+26+36=i(j(ajbi))=(4+5+6)1+(4+5+6)2+(4+5+6)3=j(ajibi)

逆元的性质

( a , p ) = 1 (a,p)=1 (a,p)=1,则有: a − 1 ≡ ( a % p ) − 1 ( m o d p ) a^{-1}≡(a\%p)^{-1} \pmod p a1(a%p)1(modp)
证明:当 a < p a<p a<p 时,同余式显然成立。否则,有:
    a ≡ a % p ( m o d p ) a≡a\%p\pmod p aa%p(modp)
    ∵   ( a , p ) = 1 \because\ (a,p)=1  (a,p)=1
    ( a % p , p ) = ( a , p ) = 1 (a\%p,p)=(a,p)=1 (a%p,p)=(a,p)=1
   必然存在 ( a % p ) − 1 (a\%p)^{-1} (a%p)1,使得 ( a % p ) ⋅ ( a % p ) − 1 ≡ 1 ( m o d p ) (a\%p)\cdot(a\%p)^{-1}≡1\pmod p (a%p)(a%p)11(modp)
   根据同余的性质3,两边同时乘以 ( a % p ) − 1 (a\%p)^{-1} (a%p)1
    a ( a % p ) − 1 ≡ 1 ( m o d p ) a(a\%p)^{-1}≡1\pmod p a(a%p)11(modp)
   又 ( a , p ) = 1 (a,p)=1 (a,p)=1,根据同余的性质4,两边同时除以 a a a
    ∴   ( a % p ) − 1 ≡ a − 1 ( m o d p ) \therefore\ (a\%p)^{-1}≡a^{-1}\pmod p  (a%p)1a1(modp)

快速幂

由于 x p = { ( x p 2 ) 2 , p ≡ 0 ( m o d 2 ) ( x ⌊ p 2 ⌋ ) 2 × x , p ≡ 1 ( m o d 2 ) x^p=\begin{cases}(x^{\large\frac p2})^2&,p≡0\pmod 2 \\(x^{\large\lfloor\frac p2\rfloor})^2\times x&,p≡1\pmod 2\end{cases} xp= (x2p)2(x2p)2×x,p0(mod2),p1(mod2)
因此可以二分

long long pow_mod(long long x, long long n, long long mod){
	if(n==1) return x%mod;
    long long t=pow_mod(x,n>>1,mod);
    if(n&1) return t*t%mod*n%mod;
    return t*t%mod;
}

能否转为递归?令 n = 13 = ( 1101 ) 2 n=13=(1101)_2 n=13=(1101)2,则
a n = a 13 = 1 a 8 × 1 a 4 × 0 a 2 × 1 a 1 a^n=a^{13}=1a^8\times 1a^4\times 0a^2\times 1a^1 an=a13=1a8×1a4×0a2×1a1

可以发现,只需要累乘上二进制为1的位置对应的 a a a 的幂即可。

long long pow_mod(long long a,long long k) {
    long long base=1;
    for(a%=P;k;k>>=1,a=(a*a)%P)
        if(k&1) base=(base*a)%P;
    return base%P;
}

时间复杂度: Θ ( log ⁡ 2 p ) Θ(\log_2p) Θ(log2p)

二分乘法

∵ x × p = { 2 ( x × p 2 ) , p ≡ 0 ( m o d 2 ) 2 ( x × ⌊ p 2 ⌋ ) + x , p ≡ 1 ( m o d 2 ) \because x\times p= \begin{cases} 2(x\times {\large\frac p2}) & ,p≡0\pmod 2 \\ 2(x\times{\large\lfloor\frac p2\rfloor})+x&,p≡1\pmod 2 \\ \end{cases} x×p={2(x×2p)2(x×2p)+x,p0(mod2),p1(mod2)
因此可以二分

unsigned long long mul_mod(long long a,long long b,long long m) {
	unsigned long long ans=0;
	a%=m;
	while(b) {
		if(b&1) {
			ans=(ans+a)%m;
			b--;
		} b>>=1;
		a=(a+a)%m;
	} return ans;
}

时间复杂度: Θ ( log ⁡ 2 p ) Θ(\log_2p) Θ(log2p)
有什么用吗?如果 x × p x\times p x×p 会爆 l o n g   l o n g long\ long long long 呢?


黑科技预警   Θ ( 1 ) \Theta(1) Θ(1) 快速 l o n g   l o n g long\ long long long 无误差乘法

long long mul(long long a,long long b,long long P){
	a=(a%P+P)%P,b=(b%P+P)%P;
	return ((a*b-(long long)((long double)a/P*b+1e-6)*P)%P+P)%P;
}

主要原理是 ( a ∗ b ) % p = ( a ∗ b ) − ⌊ a ∗ b p ⌋ ∗ p (a*b)\%p=(a*b)-\left\lfloor \dfrac{a*b}{p}\right\rfloor*p (ab)%p=(ab)pabp,其中 a ∗ b a*b ab ⌊ a ∗ b p ⌋ \left\lfloor \dfrac{a*b}{p}\right\rfloor pab 都有溢出的可能,但利用C++的特性,溢出位会自然丢失,因而只要两者相减的答案在 l o n g   l o n g long\ long long long 范围内,就能保证答案正确。其中使用了 1e-6 来控制 l o n g   d o u b l e long\ double long double 的误差。


欧几里得算法

结论: ( a , b ) = ( b , a  mod  b ) (a,b)=(b,a\ \text{mod}\ b) (a,b)=(b,a mod b)
证明: a a a 可以表示成 a = k b + r a = kb + r a=kb+r,则 r = a  mod  b r = a\ \text{mod}\ b r=a mod b
    \qquad\,\; d d d a , b a,b a,b 的一个公约数,则有
    d ∣ a , d ∣ b \qquad\,\;d|a, d|b da,db,而 r = a − k b r = a - kb r=akb,因此 d ∣ r d|r dr
    ∴ d \qquad\,\;\therefore d d ( b , a  mod  b ) (b,a\ \text{mod}\ b) (b,a mod b)的公约数
    \qquad\,\; a a a b b b 的公约数集合为 A A A b b b a  mod  b a\ \text{mod}\ b a mod b 的公约数集合为 B B B
    \qquad\,\; A = B A=B A=B,故 ( a , b ) = ( b , a  mod  b ) (a,b)=(b,a\ \text{mod}\ b) (a,b)=(b,a mod b)
代码:

int gcd(int a,int b) {
	return b==0?a:gcd(b,a%b);
}

时间复杂度(蓝书): O ( 12 × ln ⁡ 2 × ln ⁡ m i n ( a , b ) ) π 2 + 1.47 ) ≈ O ( ln ⁡ m i n ( a , b ) ) ≈ O ( l o g 2 n ) O\left(\dfrac{12 \times \ln2 \times \ln min(a,b))}{π ^ 2} + 1.47\right)≈O(\ln min(a,b))≈O(log_2n) O(π212×ln2×lnmin(a,b))+1.47)O(lnmin(a,b))O(log2n)
其实根据梅拉定理,所运算的次数一定不会超过较小数的位数的 5 5 5 倍。


吐槽预警 好好的循环不用非要用递归。

long long gcd(long long a,long long b) {
	while(b^=a^=b^=a%=b);
	return a;
}

黑科技预警 上面的代码都是吃多了的表现。

using std::__gcd;

裴蜀定理

定理:如果 a , b ∈ N , ( a , b ) = d a,b\in N,(a,b)=d a,bN,(a,b)=d 那么一定存在 x , y x,y x,y 使得 d ∣ ( a x + b y ) d|(ax+by) d(ax+by)
证明:    ∵   ( a , b ) = d \;\because\ (a,b)=d  (a,b)=d
   必然存在 p p p q q q 使得 a = p × d , b = q × d a=p\times d,b=q\times d a=p×d,b=q×d
    a x + b y = ( p × d ) x + ( q × d ) y = d ( p × x + q × y ) ax+by=(p\times d)x+(q\times d)y=d(p\times x+q\times y) ax+by=(p×d)x+(q×d)y=d(p×x+q×y)
    d ∣ ( a x + b y ) d|(ax+by) d(ax+by)

扩展欧几里得算法

直接作用:在执行欧几里得算法的时候可以顺便求出型如 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b) 的不定方程的通解。
推导 & 证明:
由原欧几里得算法可得: ( a , b ) = ( b , a  mod  b ) (a,b)=(b,a\ \text{mod}\ b) (a,b)=(b,a mod b)
对于型如 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b) 的不定方程,根据裴蜀定理,原不定方程一定有解,因而有
a x + b y = ( a , b ) = ( b , a  mod  b ) = b x ′ + ( a  mod  b ) y ′ ax+by=(a,b)=(b,a\ \text{mod}\ b)=bx'+(a\ \text{mod}\ b)y' ax+by=(a,b)=(b,a mod b)=bx+(a mod b)y

又因为 a   m o d   b = a − ⌊ a / b ⌋ × b a\ mod\ b=a-\lfloor a/b\rfloor\times b a mod b=aa/b×b

因而
  a x + b y = b x ′ + ( a − ⌊ a / b ⌋ × b )   y ′ = b x ′ + a y ′ − ⌊ a / b ⌋ × b y ′ = a y ′ + b x ′ − ⌊ a / b ⌋ × b y ′ = a y ′ + b ( x ′ − ⌊ a / b ⌋ × y ′ ) \begin{aligned}\ ax+by&=bx'+(a-\lfloor a/b\rfloor\times b)\,y'\\ \qquad&=bx'+ay'-\lfloor a/b\rfloor\times by' \\ \qquad&=ay'+bx'-\lfloor a/b\rfloor\times by' \\ \qquad&=ay'+b(x'-\lfloor a/b\rfloor\times y')\end{aligned}  ax+by=bx+(aa/b×b)y=bx+aya/b×by=ay+bxa/b×by=ay+b(xa/b×y)

进而
{ x = y ′ y = x ′ − ⌊ a / b ⌋ × y ′ \begin{cases}x=y' \\ y=x'-\lfloor a/b\rfloor\times y'\end{cases} {x=yy=xa/b×y

然后就可以愉快地递归啦。
边界条件为 x = 1 , y = 0 x=1,y=0 x=1,y=0,此时 b = 0 b=0 b=0
其实还可以化简,即在递归的时候,计算exgcd(b,a%b,y,x)这样回来的时候 y ′ y' y 的值就已经放在 x x x 里了,然后再把y-=a/b*x就行了,当然也可以直接算。

int exgcd(int a,int b,long long &x,long long &y) {
    if(!b)
        return x=1,y=0,a;
    int d=exgcd(b,a%b,y,x);
    y-=a/b*x;//化简后的式子 
    return d;
}

求出的 x x x y y y 是所有 x x x y y y ∣ x ∣ + ∣ y ∣ |x|+|y| x+y 最小的,这个结论并没有什么用处,这里就不证了。
可原不定方程不止一组解啊,其实只要有了 x x x y y y ,其他的解就都出来了。
x t = x + b ( a , b ) × t y t = y − a ( a , b ) × t \begin{aligned}x_t&=x+\dfrac b{(a,b)}\times t\\ y_t&=y-\dfrac a{(a,b)}\times t\end{aligned} xtyt=x+(a,b)b×t=y(a,b)a×t

为什么?代入到原式看看。
( a , b ) = a ( x + b ( a , b ) × t ) + b ( y − a ( a , b ) × t ) = a x + a b ( a , b ) × t + b y − a b ( a , b ) × t = a x + b y \begin{aligned}(a,b)&=a\left(x+\dfrac b{(a,b)}\times t\right)+b\left(y-\dfrac a{(a,b)}\times t\right)\\ &=ax+\dfrac {ab}{(a,b)}\times t+by-\dfrac {ab}{(a,b)}\times t\\ &=ax+by\end{aligned} (a,b)=a(x+(a,b)b×t)+b(y(a,b)a×t)=ax+(a,b)ab×t+by(a,b)ab×t=ax+by

∴ a x + b y = ( a , b ) \therefore ax+by=(a,b) ax+by=(a,b)
这显然成立
∴ a x t + b y t = ( a , b ) \therefore ax_t+by_t=(a,b) axt+byt=(a,b)
可为什么不是
x t = x + b × t x_t=x+b\times t xt=x+b×t
y t = y − a × t y_t=y-a\times t yt=ya×t
因为 t ∈ Z t\in Z tZ ( b ( a , b ) , a ( a , b ) ) = 1 \left(\dfrac b{(a,b)},\dfrac a{(a,b)}\right)=1 ((a,b)b,(a,b)a)=1
因此 b ( a , b ) , a ( a , b ) \dfrac b{(a,b)},\dfrac a{(a,b)} (a,b)b,(a,b)a 取到最多的解。

欧拉定理

结论:若存在 p p p a a a,满足 p , a ∈ N ∗ , ( p , a ) = 1 p,a\in N^*,(p,a)=1 p,aN,(p,a)=1,则 a φ ( p ) ≡ 1 ( m o d p ) a^{\varphi(p)}≡1\pmod p aφ(p)1(modp)
证明:考虑 p p p 条同余式,其中 ∀   i ⩽ φ ( p ) , m i < p \forall\ i\leqslant \varphi(p), m_i<p  iφ(p),mi<p,且其中 x i x_i xi 即小于等于 p p p 且与 p p p 互质的数,即 ( x i , p ) = 1 (x_i,p)=1 (xi,p)=1

{ a × x 1 ≡ m 1 ( m o d p ) ( 1 ) a × x 2 ≡ m 2 ( m o d p ) ( 2 ) ⋯ a × x φ ( p ) ≡ m φ ( p ) ( m o d p ) ( φ ( p ) ) \begin{cases}a\times x_1&≡m_1&\pmod p&&(1)\\ a\times x_2&≡m_2&\pmod p&&(2)\\ &\cdots\\ a\times x_{\varphi(p)}&≡m_{\varphi(p)}&\pmod p&&(\varphi(p))\end{cases} a×x1a×x2a×xφ(p)m1m2mφ(p)(modp)(modp)(modp)(1)(2)(φ(p))

定义 X = { x i ∣ 1 ⩽ i ⩽ φ ( p ) } , M = { m i ∣ 1 ⩽ i ⩽ φ ( p ) } X=\{x_i|1\leqslant i\leqslant \varphi(p)\},M=\{m_i|1\leqslant i\leqslant \varphi(p)\} X={xi∣1iφ(p)},M={mi∣1iφ(p)}


引理 1: ∣ M ∣ = φ ( p ) |M|=\varphi(p) M=φ(p)
证明:假设存在 i i i j j j,满足 i > j , m i = m j i>j,m_i=m_j i>j,mi=mj
   则 ( i ) − ( j ) (i)-(j) (i)(j) a ( x i − x j ) ≡ 0 ( m o d p ) a(x_i-x_j)≡0\pmod p a(xixj)0(modp)
   又 ∵ ( a , p ) = 1 \because (a,p)=1 (a,p)=1
    ∴ x i − x j ≡ 0 ( m o d p ) \therefore x_i-x_j≡0\pmod p xixj0(modp)
   又 ∵ x i − x j < p \because x_i-x_j<p xixj<p
    ∴ p ∤      ( x i − x j ) \therefore p\not|\;\; (x_i-x_j) p(xixj)
    ∴ x i − x j ≢ 0 ( m o d p ) \therefore x_i-x_j\not≡0\pmod p xixj0(modp),矛盾
    ∴   \therefore\, 不存在 i i i j j j,满足 i > j , m i = m j i>j,m_i=m_j i>j,mi=mj
    ∴ ∣ M ∣ = φ ( p ) \therefore |M|=\varphi(p) M=φ(p)


引理 2: ∀ m i , m i ∈ X \forall m_i,m_i\in X mi,miX
证明: ∵ ( a , p ) = 1 , ( x i , p ) = 1 \because (a,p)=1,(x_i,p)=1 (a,p)=1,(xi,p)=1
    ∴ ( a × x i , p ) = 1 \therefore (a\times x_i,p)=1 (a×xi,p)=1
   由欧几里得算法得: ( p , ( a × x i )  mod  p ) = 1 (p,(a\times x_i)\ \text{mod}\ p)=1 (p,(a×xi) mod p)=1
    ∴ ( m i , p ) = 1 \therefore (m_i,p)=1 (mi,p)=1
    ∴ m i ∈ X \therefore m_i\in X miX


又 ∵ ∣ M ∣ = ∣ X ∣ = φ ( p ) 又\because |M|=|X|=\varphi(p) M=X=φ(p)
∴ M = X \therefore M=X M=X
φ ( p ) \varphi(p) φ(p) 条式子乘起来,得
∏ i = 1 φ ( p ) ( a × x i ) ≡ ∏ i = 1 φ ( p ) m i ( m o d p ) ⇒ a φ ( p ) × ∏ i = 1 φ ( p ) x i ≡ ∏ i = 1 φ ( p ) m i ( m o d p ) \begin{aligned}\prod\limits_{i=1}^{\varphi(p)}(a\times x_i)≡\prod\limits^{\varphi(p)}_{i=1}m_i\pmod p ⇒a^{\varphi(p)}\times \prod\limits^{\varphi(p)}_{i=1}x_i≡\prod\limits^{\varphi(p)}_{i=1}m_i\pmod p\end{aligned} i=1φ(p)(a×xi)i=1φ(p)mi(modp)aφ(p)×i=1φ(p)xii=1φ(p)mi(modp)
∵ ∏ i = 1 φ ( p ) x i ≡ ∏ i = 1 φ ( p ) m i ( m o d p ) \begin{aligned}\because\prod\limits^{\varphi(p)}_{i=1}x_i≡\prod\limits^{\varphi(p)}_{i=1}m_i\pmod p\end{aligned} i=1φ(p)xii=1φ(p)mi(modp)
∴ a φ ( p ) ≡ 1 ( m o d p ) \therefore a^{\varphi(p)}≡1\pmod p aφ(p)1(modp)

一些应用

( a , p ) = 1 (a,p)=1 (a,p)=1,则 a b  mod  p = a b  mod  φ ( p )  mod  p a^b\ \text{mod}\ p=a^{b\ \text{mod}\ \varphi(p)}\ \text{mod}\ p ab mod p=ab mod φ(p) mod p
否则有 a b ≡ a m i n ( b  mod  φ ( p ) + φ ( p ) , b )  mod  p a^b ≡ a^{min(b\ \text{mod}\ φ(p)+φ(p),b)}\ \text{mod}\ p abamin(b mod φ(p)+φ(p),b) mod p

费马小定理

结论:若存在 a a a p p p,满足 ( a , p ) = 1 (a,p)=1 (a,p)=1,且 p ∈ p r i m e p\in prime pprime,则 a p − 1 ≡ 1 ( m o d p ) a^{p-1}≡1 \pmod p ap11(modp)
证明: ∵ ∀ p ∈ p r i m e , φ ( p ) = p − 1 \because \forall p\in prime,\varphi(p)=p-1 pprime,φ(p)=p1
    ∴ a p − 1 ≡ a φ ( p ) ≡ 1 ( m o d p ) \therefore a^{p-1}≡a^{\varphi(p)}≡1\pmod p ap1aφ(p)1(modp) (欧拉定理)

逆元

扩展欧几里得

a × x ≡ 1 ( m o d p ) a\times x≡1\pmod p a×x1(modp) 中, x = a − 1 x=a^{-1} x=a1
转化为不定方程 a x − p y = 1 ax-py=1 axpy=1
进一步转化为 a x + p ⋅ ( − y ) = 1 ax+p\cdot(-y)=1 ax+p(y)=1
用扩展欧几里得解不定方程即可,若 ( a , p ) = 1 (a,p)=1 (a,p)=1,则求得的 x x x 即为 a − 1 a^{-1} a1
但要注意, x x x 可能小于 0 0 0,但满足 x ≡ x + p ( m o d p ) x≡x+p\pmod p xx+p(modp),因此,把 x x x 加上一个 p p p 即可。

long long inv(long long a,long long n) {
	long long x,y;
	long long d=exgcd(a,n,x,y);
	return d==1?(x+n)%n:-1;
}

时间复杂度: Θ ( ln ⁡ p ) Θ(\ln p) Θ(lnp)

费马小定理

∵ \because p ∈ p r i m e p\in prime pprime 时, a p − 1 ≡ 1 ( m o d p ) , ( a , p ) = 1 a^{p-1}≡1\pmod p,(a,p)=1 ap11(modp),(a,p)=1
∴ a p − 1 × a − 1 ≡ 1 × a − 1 ( m o d p ) \therefore a^{p-1}\times a^{-1}≡1\times a^{-1}\pmod p ap1×a11×a1(modp)
∴ a p − 2 ≡ a − 1 ( m o d p ) \therefore a^{p-2}≡a^{-1}\pmod p ap2a1(modp)
∴ a − 1 ≡ a p − 2 ( m o d p ) \therefore a^{-1}≡a^{p-2}\pmod p a1ap2(modp)

因此 a a a 的逆元即 a p − 2  mod  p a^{p-2}\ \text{mod}\ p ap2 mod p

#define inv(x,mod) (pow_mod(x,mod-2,mod))

时间复杂度: Θ ( log ⁡ 2 ( m o d − 2 ) ) Θ(\log_2(mod-2)) Θ(log2(mod2))

欧拉定理

∵ \because ( a , p ) = 1 (a,p)=1 (a,p)=1 时, a φ ( p ) ≡ 1 ( m o d p ) a^{\varphi(p)}≡1\pmod p aφ(p)1(modp)
∴ a φ ( p ) × a − 1 ≡ 1 × a − 1 ( m o d p ) \therefore a^{\varphi(p)}\times a^{-1}≡1\times a^{-1}\pmod p aφ(p)×a11×a1(modp)
∴ a φ ( p ) − 1 ≡ a − 1 ( m o d p ) \therefore a^{\varphi(p)-1}≡a^{-1}\pmod p aφ(p)1a1(modp)
∴ a − 1 ≡ a φ ( p ) − 1 ( m o d p ) \therefore a^{-1}≡a^{\varphi(p)-1}\pmod p a1aφ(p)1(modp)
因此 a a a 的逆元即 a φ ( p ) − 1  mod  p a^{\varphi(p)-1}\ \text{mod}\ p aφ(p)1 mod p
时间复杂度: Θ ( 求 φ ( n ) 的时间 + log ⁡ 2 ( φ ( p ) − 1 ) ) Θ(求\varphi(n)的时间+\log_2(\varphi(p)-1)) Θ(φ(n)的时间+log2(φ(p)1))

线性求逆元

显然地, 1 − 1 ≡ 1 ( m o d p ) 1^{-1}≡1\pmod p 111(modp)
对于 i ( i > 1 ) i(i>1) i(i>1),必然存在 k k k r r r,使得 p = k × i + r p=k\times i+r p=k×i+r,满足 r < i , 1 < i < p r<i,1<i<p r<i,1<i<p
∵ p ≡ 0 ( m o d p ) \because p≡0\pmod p p0(modp)
∴ k × i + r ≡ 0 ( m o d p ) \therefore k\times i+r≡0\pmod p k×i+r0(modp)
∴ ( k × i + r ) × ( i − 1 × r − 1 ) ≡ 0 × ( i − 1 × r − 1 ) ( m o d p ) \therefore (k\times i+r)\times (i^{-1}\times r^{-1})≡0\times (i^{-1}\times r^{-1})\pmod p (k×i+r)×(i1×r1)0×(i1×r1)(modp)
∴ k × i × i − 1 × r − 1 + r × i − 1 × r − 1 ≡ 0 ( m o d p ) \therefore k\times i\times i^{-1}\times r^{-1}+r\times i^{-1}\times r^{-1}≡0\pmod p k×i×i1×r1+r×i1×r10(modp)
∴ k × r − 1 + i − 1 ≡ 0 ( m o d p ) \therefore k\times r^{-1}+i^{-1}≡0\pmod p k×r1+i10(modp)
∴ i − 1 ≡ − k × r − 1 ( m o d p ) \therefore i^{-1}≡-k\times r^{-1}\pmod p i1k×r1(modp)
又 ∵ k = ⌊ p i ⌋ , r = p  mod  i 又\because k=\lfloor \frac pi\rfloor,r=p\ \text{mod}\ i k=ip,r=p mod i
∴ i − 1 ≡ − ⌊ p i ⌋ × ( p  mod  i ) − 1 ( m o d p ) \therefore i^{-1}≡-\lfloor \frac pi\rfloor\times (p\ \text{mod}\ i)^{-1}\pmod p i1ip×(p mod i)1(modp)
∴ i − 1 ≡ p − ⌊ p i ⌋ × ( p  mod  i ) − 1 ( m o d p ) \therefore i^{-1}≡p-\lfloor \frac pi\rfloor\times (p\ \text{mod}\ i)^{-1}\pmod p i1pip×(p mod i)1(modp)
因为在计算 i i i 之前, ( p  mod  i ) − 1 (p\ \text{mod}\ i)^{-1} (p mod i)1 一定已经被算出来了,因此可以愉快地递推了。
代码 ( i n v [ i ] 表示 i − 1 ) (inv[i]表示i^{-1}) (inv[i]表示i1)

inv[1]=1;
for(int i=2;i<=n;i++)
	inv[i]=((long long)(mod-mod/i)*inv[mod%i])%mod;

时间复杂度: Θ ( n ) Θ(n) Θ(n)

神奇“逆元”

逆元都必须在当 ( a , p ) = 1 (a,p)=1 (a,p)=1 时才存在,那如果题目没有保证 ( a , p ) = 1 (a,p)=1 (a,p)=1 呢?可以用下面的式子。
结论: a b  mod  p = a  mod  ( b p ) b \dfrac ab\ \text{mod}\ p=\dfrac{a\ \text{mod}\ (bp)}b ba mod p=ba mod (bp)证明:
a b  mod  p = a b − ⌊ a b p ⌋ × p = a b − ⌊ a p b ⌋ × p = a b − ⌊ a p b ⌋ × b × p b = a b − ⌊ a p b ⌋ × p b b = a − ⌊ a p b ⌋ × p b b = a  mod  ( p b ) b \begin{aligned}\dfrac ab\ \text{mod}\ p&=\dfrac ab-\lfloor \dfrac{\frac ab}{p} \rfloor\times p\\ &=\dfrac ab-⌊\dfrac{a}{pb}⌋\times p\\ &=\dfrac ab-⌊\dfrac{a}{pb}⌋\times b\times \dfrac pb\\ &=\dfrac ab-\dfrac {⌊\dfrac{a}{pb}⌋\times pb}{b}\\ &=\dfrac {a-⌊\dfrac{a}{pb}⌋\times pb}{b}\\ &=\dfrac{a\ \text{mod}\ (pb)}b\end{aligned} ba mod p=bapba×p=bapba×p=bapba×b×bp=babpba×pb=bapba×pb=ba mod (pb)

p b pb pb 可能爆 l o n g   l o n g long\ long long long,因此在计算时需要用到二分乘法。

阶乘的逆元

如果让你求出 ( i ! ) − 1 % p ( 1 ⩽ i < p ) (i!)^{-1}\%p\quad(1\leqslant i< p) (i!)1%p(1i<p),你会需要多少时间?
很显然,按照之前的方法需要 O ( n log ⁡ 2 n ) O(n\log_2n) O(nlog2n)
这里有一种方法可以把时间复杂度降低到 O ( n + log ⁡ 2 n ) O(n+\log_2n) O(n+log2n)
显然地,有
( x ! ) − 1 ≡ 1 x ! ( m o d p ) (x!)^{-1}≡\dfrac{1}{x!}\pmod p (x!)1x!1(modp)
根据同余的性质3两边同时乘以 x x x ,得:
[ ( x − 1 ) ! ] − 1 ≡ 1 ( x − 1 ) ! ( m o d p ) [(x-1)!]^{-1}≡\dfrac{1}{(x-1)!}\pmod p [(x1)!]1(x1)!1(modp)
那就可以先预处理出 ( n ! ) − 1 (n!)^{-1} (n!)1,然后反着推回去。
其中求 ( n ! ) − 1 (n!)^{-1} (n!)1 的时候用到逆元的性质

fac[0]=1;
for(int i=1;i<p;i++)//阶乘预处理
	fac[i]=fac[i-1]*i%p;
fac_inv[p-1]=inv(fac[p-1],p);//计算阶乘逆元
for(int i=p-2;i>=0;i--)//倒推
	fac_inv[i]=fac_inv[i+1]*(i+1)%p;

时间复杂度:求 p ! p! p! 需要 O ( p ) O(p) O(p),求 ( p ! ) − 1 (p!)^{-1} (p!)1 需要 O ( log ⁡ 2 n ) O(\log_2n) O(log2n),逆推需要 O ( n ) O(n) O(n)
因此,渐进时间复杂度为 O ( n + log ⁡ 2 n ) O(n+\log_2n) O(n+log2n)
可是为什么这里只到 ( p − 1 ) − 1 (p-1)^{-1} (p1)1 呢?
因为 p ! , ( p + 1 ) ! , … p!,(p+1)!,\dots p!,(p+1)!, p p p 取模得 0 0 0,因此它们的逆元相当于 0 0 0 的逆元,并不存在。(逆元的性质)

二元一次不定方程

形如 a x + b y = c ax+by=c ax+by=c 的方程称为二元一次不定方程。
解法
先利用扩展欧几里得算法求解出不定方程 a x ′ + b y ′ = ( a , b ) ax'+by'=(a,b) ax+by=(a,b)
k = c ( a , b ) k=\dfrac{c}{(a,b)} k=(a,b)c
∴ ( a x ′ + b y ′ ) × k = ( a , b ) × k \therefore (ax'+by')\times k=(a,b)\times k (ax+by)×k=(a,b)×k
∴ ( a x ′ + b y ′ ) × k = ( a , b ) × c ( a , b ) \therefore (ax'+by')\times k=(a,b)\times \dfrac{c}{(a,b)} (ax+by)×k=(a,b)×(a,b)c
∴ a x ′ k + b y ′ k = c \therefore ax'k+by'k=c axk+byk=c
∴ x = x ′ k , y = y ′ k \therefore x=x'k,y=y'k x=xk,y=yk
代码:

int Dioequ(int a,int b,int c,long long &x,long long &y){
	int d=exgcd(a,b,x,y);
	int k=c/d;
	x*=k;y*=k;
}

类似地,也满足 ∣ x ∣ + ∣ y ∣ |x|+|y| x+y 最小。
类似地,也可以利用 x x x y y y求出所有解。
x t = x − b ( a , b ) × t y t = y + a ( a , b ) × t \begin{aligned}x_t&=x-\frac{b}{(a,b)}\times t\\ y_t&=y+\frac{a}{(a,b)}\times t\end{aligned} xtyt=x(a,b)b×t=y+(a,b)a×t证明见扩展欧几里得算法。

同余方程

类似地,含有未知数的同余式称为同余方程。分为如下几类。

一元线性同余方程

定义:形如 a x ≡ b ( m o d p ) ax≡b\pmod p axb(modp) 的方程称为线性同余方程,其中, a b ab ab 均为整数, m m m 为正整数。
可以发现,同余式两边同乘以模 m m m 意义下 a − 1 a^{-1} a1 就好了……
但新的一个问题来了,我们要怎么求出所有的解呢?
这个问题LZ至今不会,因此还是换一种方法吧。


可以发现,线性同余方程 a x ≡ b ( m o d m ) ax≡b\pmod m axb(modm) 等价于不定方程 a x + m y = b ax+my=b ax+my=b
然后就可以愉快地用扩展欧几里得算法解啦!因此所有的解集为:
{ x + t × b ( a , b ) ∣ 0 ⩽ t < ( a , b ) } \quad\{x+t\times \frac b{(a,b)}|0\leqslant t<(a,b) \} {x+t×(a,b)b∣0t<(a,b)}
为什么 t t t 只到 ( a , b ) − 1 (a,b)-1 (a,b)1?因为从 ( a , b ) (a,b) (a,b) 开始循环了。可那又是为什么?
设存在 t i t_i ti t j t_j tj,满足 0 ⩽ t i < m , t j ≡ t i + ( a , b ) ( m o d m ) {0\leqslant t_i<m,t_j≡t_i+(a,b)\pmod m} 0ti<m,tjti+(a,b)(modm),且 x + t i × m ( a , b ) ≢ x + t j × m ( a , b ) ( m o d m ) {x+t_i\times \frac m{(a,b)}\not≡x+t_j\times \dfrac m{(a,b)}\pmod m} x+ti×(a,b)mx+tj×(a,b)m(modm)
∴ t i × m ( a , b ) ≢ t j × m ( a , b ) ( m o d m ) \therefore t_i\times \dfrac m{(a,b)}\not≡t_j\times \frac m{(a,b)}\pmod m ti×(a,b)mtj×(a,b)m(modm)
∵ m ( a , b ) ∣ m \because \frac m{(a,b)}|m (a,b)mm
∴ ( m ( a , b ) , m ) = m ( a , b ) \therefore(\frac m{(a,b)},m)=\frac m{(a,b)} ((a,b)m,m)=(a,b)m
根据(不)同余的性质8,可得:
t i ≢ t j ( m o d ( a , b ) ) \quad t_i\not≡t_j\pmod {(a,b)} titj(mod(a,b))
t i ≢ t i + ( a , b ) ( m o d ( a , b ) ) \quad t_i\not≡t_i+(a,b)\pmod {(a,b)} titi+(a,b)(mod(a,b))
t i ≢ t i ( m o d ( a , b ) ) \quad t_i\not≡t_i\pmod {(a,b)} titi(mod(a,b))
矛盾。故从 ( a , b ) (a,b) (a,b) 开始, x x x 出现循环。
而最后得到的式子也告诉我们,只有 ( a , b ) (a,b) (a,b) 个不同的解。

中国剩余定理

如果方程有多个,但是未知数仍然只有一个怎么办?先来考虑所有 m i m_i mi 互质的情况。
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) ∀ i ≠ j , ( m i , m j ) = 1 / / 互质 \begin{cases}x≡a_1\pmod{m_1}\\x≡a_2\pmod{m_2}\\\qquad\vdots\\x≡a_n\pmod{m_n}\\ \forall i\not=j,(m_i,m_j)=1&//互质\end{cases} xa1(modm1)xa2(modm2)xan(modmn)i=j,(mi,mj)=1//互质

M = ∏ i = 1 n m i M=\prod\limits_{i=1}^n m_i M=i=1nmi w i = M m i w_i=\dfrac M{m_i} wi=miM,由于所有的 m i m_i mi 互质,有 ( w i , m i ) = 1 (w_i,m_i)=1 (wi,mi)=1
用扩展欧几里得求不定方程 p i p_i pi q i q_i qi,满足 w i p i + m i q i = ( w i , m i ) = 1 w_ip_i+m_iq_i=(w_i,m_i)=1 wipi+miqi=(wi,mi)=1
e i = w i p i e_i=w_ip_i ei=wipi 则方程组等价于 x ≡ ∑ i = 1 n e i a i ( m o d M ) x≡\sum\limits_{i=1}^ne_ia_i\pmod M xi=1neiai(modM)

证明:方程组等价于 x ≡ ∑ i = 1 n e i a i ( m o d M ) {\begin{aligned}x≡\sum\limits_{i=1}^ne_ia_i\pmod M\end{aligned}} xi=1neiai(modM)
   当且仅当对于所有的 1 ⩽ k ⩽ n 1\leqslant k\leqslant n 1kn,有 ∑ i = 1 n e i a i ≡ a k ( m o d m k ) {\begin{aligned}\sum\limits_{i=1}^ne_ia_i≡a_k\pmod {m_k}\end{aligned}} i=1neiaiak(modmk)
   Part 1:
    ∵   w t p t + m t q t = 1 ∴   e t ≡ w t p t ≡ 1 ( m o d m t ) ∴   e t a t ≡ a t ( m o d m t ) \begin{aligned} \because&\ w_tp_t+m_tq_t=1\\ \therefore&\ e_t≡w_tp_t≡1\pmod {m_t}\\ \therefore&\ e_ta_t≡a_t\pmod {m_t}\\ \end{aligned}  wtpt+mtqt=1 etwtpt1(modmt) etatat(modmt)
   Part 2:令 t ≠ k t\not=k t=k,则
    ∵   M = ∏ i = 1 n m i , w i = M m i ∴   m k ∣ w t ∴   w t ≡ 0 ( m o d m k ) ∴   e t a t ≡ w t p t a t ≡ 0 × p t a t ≡ 0 ( m o d m k ) \begin{aligned} \because&\ M=\prod\limits_{i=1}^n m_i,w_i=\dfrac M{m_i}\\ \therefore&\ m_k|w_t\\ \therefore&\ w_t≡0\pmod {m_k}\\ \therefore&\ e_ta_t≡w_tp_ta_t≡0\times p_ta_t≡0\pmod {m_k}\\ \end{aligned}  M=i=1nmi,wi=miM mkwt wt0(modmk) etatwtptat0×ptat0(modmk)
   综上,有:
    ∑ i = 1 n e i a i ≡ ∑ i = 1 , i ≠ k n e i a i + ∑ i = k e i a i ≡ ∑ i = 1 , i ≠ k n 0 + e k a k ≡ a k ( m o d m k ) {\begin{aligned} \sum_{i=1}^ne_ia_i&≡\sum_{i=1,i\not=k}^ne_ia_i+\sum_{i=k}e_ia_i\\ &≡\sum_{i=1,i\not=k}^n0+e_ka_k\\ &≡a_k\pmod {m_k}\end{aligned}} i=1neiaii=1,i=kneiai+i=keiaii=1,i=kn0+ekakak(modmk)

long long china(int n,int *a,int *m){
	long long M=1,p,q,x=0;
	for(int i=1;i<=n;i++)
		M*=m[i];//计算M 
	for(int i=1;i<=n;i++){
		long long w=M/m[i]; //计算w[i]
		exgcd(w,m[i],p,q);  //解不定方程(q是废的)
		x=(x+p*w*a[i])%M;   //累加答案 
	}
	return (x+M)%M;
}

扩展中国剩余定理

中国剩余定理的作用域仅仅包括 ∀ i ≠ j , ( m i , m j ) = 1 \forall i\not=j,(m_i,m_j)=1 i=j,(mi,mj)=1 的同余方程组,那不满足这一条件的方程组又要如何?用扩展中国剩余定理。
首先要知道,中国剩余定理和扩展中国剩余定理半毛钱关系也没有。 那么先来考虑两个同余式的情况( m 1 , m 2 , c 1 , c 2 m_1,m_2,c_1,c_2 m1,m2,c1,c2 已知):
{ x ≡ c 1 ( m o d m 1 ) x ≡ c 2 ( m o d m 2 ) \begin{cases}x≡c_1\pmod {m_1}\\ x≡c_2\pmod {m_2} \end{cases} {xc1(modm1)xc2(modm2)

稍作变形:
{ x = c 1 + m 1 k 1 ( 1 ) x = c 2 + m 2 k 2 \begin{cases} x=c_{1}+m_{1}k_{1}&(1)\\ x=c_{2}+m_{2}k_{2} \end{cases} {x=c1+m1k1x=c2+m2k2(1)

联立,有:           c 1 + m 1 k 1 = c 2 + m 2 k 2 \ \,c_1+m_1k_1=c_2+m_2k_2  c1+m1k1=c2+m2k2
移项,得:          m 1 k 1 = c 2 − c 1 + m 2 k 2 m_1k_1=c_2-c_1+m_2k_2 m1k1=c2c1+m2k2
两边同时除以 ( m 1 , m 2 ) (m_1,m_2) (m1,m2),得:
m 1 k 1 ( m 1 , m 2 ) = c 2 − c 1 ( m 1 , m 2 ) + m 2 k 2 ( m 1 , m 2 ) m 1 ( m 1 , m 2 ) k 1 = c 2 − c 1 ( m 1 , m 2 ) + m 2 ( m 1 , m 2 ) k 2 \begin{aligned} \dfrac {m_{1}k_{1}}{\left( m_{1},m_{2}\right) }&=\dfrac {c_{2}-c_{1}}{\left( m_{1},m_{2}\right) }+\dfrac {m_{2}k_{2}}{\left( m_{1},m_{2}\right) }\\ \dfrac {m_{1}}{\left( m_{1},m_{2}\right) }k_{1}&=\dfrac {c_{2}-c_{1}}{\left( m_{1},m_{2}\right) }+\dfrac {m_{2}}{\left( m_{1},m_{2}\right) }k_{2}\\ \end{aligned} (m1,m2)m1k1(m1,m2)m1k1=(m1,m2)c2c1+(m1,m2)m2k2=(m1,m2)c2c1+(m1,m2)m2k2

同时模 m 2 ( m 1 , m 2 ) \dfrac {m_{2}}{( m_{1},m_{2})} (m1,m2)m2,得:
m 1 ( m 1 , m 2 ) k 1 ≡ c 2 − c 1 ( m 1 , m 2 ) ( m o d m 2 ( m 1 , m 2 ) ) \dfrac {m_{1}}{\left( m_{1},m_{2}\right) }k_{1} \equiv \dfrac {c_{2}-c_{1}}{\left( m_{1},m_{2}\right) } \pmod{\dfrac {m_{2}}{( m_{1},m_{2})}} (m1,m2)m1k1(m1,m2)c2c1(mod(m1,m2)m2)

至此,我们成功地消去了 k 2 k_2 k2
同余式两边同除 m 1 ( m 1 , m 2 ) \dfrac {m_{1}}{\left( m_{1},m_{2}\right) } (m1,m2)m1,得:
k 1 ≡ c 2 − c 1 ( m 1 , m 2 ) × ( m 1 ( m 1 , m 2 ) ) − 1 ( m o d m 2 ( m 1 , m 2 ) ) \begin{aligned} k_1\equiv {c_2-c_1\over (m_1,m_2)}\times \left({m_1\over(m_1,m_2)}\right)^{-1}\pmod {{m_2\over(m_1,m_2)}} \end{aligned} k1(m1,m2)c2c1×((m1,m2)m1)1(mod(m1,m2)m2)

因此,有: k 1 = ( m 1 ( m 1 , m 2 ) ) − 1 ∗ c 2 − c 1 ( m 1 , m 2 ) + m 2 ( m 1 , m 2 ) ∗ y \begin{aligned} k_1=\bigg({m_1\over(m_1,m_2)}\bigg)^{-1}*{c_2-c_1\over (m_1,m_2)}+{{m_2\over (m_1,m_2)}}*y \end{aligned} k1=((m1,m2)m1)1(m1,m2)c2c1+(m1,m2)m2y
注意此处的逆元仍然是模 m 2 ( m 1 , m 2 ) {\dfrac{m_2}{(m_1,m_2)}} (m1,m2)m2 意义下的。
代回到 ( 1 ) (1) (1) 式中,得:
x = c 1 + m 1 ( ( m 1 ( m 1 , m 2 ) ) − 1 ∗ c 2 − c 1 ( m 1 , m 2 ) + m 2 ( m 1 , m 2 ) ∗ y ) = m 1 ∗ ( m 1 ( m 1 , m 2 ) ) − 1 ∗ c 2 − c 1 ( m 1 , m 2 ) + m 1 m 2 ( m 1 , m 2 ) ∗ y + c 1 \begin{aligned} x&=c_{1}+m_{1}\left(\left({m_1\over(m_1,m_2)}\right)^{-1}*{c_2-c_1\over (m_1,m_2)}+{{m_2\over (m_1,m_2)}}*y\right)\\ &=m_1*\left({m_1\over(m_1,m_2)}\right)^{-1}*{c_2-c_1\over (m_1,m_2)}+{{\frac{m_1m_2}{(m_1,m_2)}}}*y+c_{1}\\ \end{aligned} x=c1+m1(((m1,m2)m1)1(m1,m2)c2c1+(m1,m2)m2y)=m1((m1,m2)m1)1(m1,m2)c2c1+(m1,m2)m1m2y+c1因而有 x ≡ m 1 ∗ ( m 1 ( m 1 , m 2 ) ) − 1 ∗ c 2 − c 1 ( m 1 , m 2 ) + c 1 ( m o d m 2 ( m 1 , m 2 ) ) \begin{aligned} x≡m_1*\left({m_1\over(m_1,m_2)}\right)^{-1}*{c_2-c_1\over (m_1,m_2)}+c_{1}\pmod {\dfrac{m_2}{(m_1,m_2)}} \end{aligned} xm1((m1,m2)m1)1(m1,m2)c2c1+c1(mod(m1,m2)m2)

至此,同余式右侧的所有元素都已经知道了,因此可以直接求解。如此对 k k k 个同余式两两合并即可。

等等!如果 c 2 − c 1 ( m 1 , m 2 ) {\dfrac{c_2-c_1}{(m_1,m_2)}} (m1,m2)c2c1 不是整数呢?换句话说,如果 ( m 1 , m 2 ) ∤    ( c 2 − c 1 ) (m_1,m_2)\not|\;(c_2-c_1) (m1,m2)(c2c1) 那该如何是好?不需要求逆元吗?
事实上,并不需要求逆元,因为如果 ( m 1 , m 2 ) ∤    ( c 2 − c 1 ) (m_1,m_2)\not|\;(c_2-c_1) (m1,m2)(c2c1),则该同余方程组无解

shank’s 大步小步算法

(坑)

Part 2

文章太长,后一部分点这里

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值