数论1.4 同余问题

一、同余概述

1.基本定义和定理

定义1:给定 m ∈ Z m∈Z mZ,若 a m o d    m = b m o d    m ( a , b ∈ Z ) a\mod m = b \mod m(a,b∈Z) amodm=bmodm(a,bZ)
a a a b b b 对模 m m m 同余记作 a ≡ b ( m o d    m ) a ≡ b(\mod m) ab(modm) ,并称该式子为同余式;否则称 a a a b b b 对模 m m m 不同余。

定义2 Z Z Z 被分为 m m m 个不同的集合 A 1... m A_{1...m} A1...m,这些集合被称为 m m m 剩余类(同余类),如果 ∀ a , b ∈ A i , i ∈ [ 1 , m ] ∀a, b∈A_i, i ∈[1, m] a,bAi,i[1,m], 则 a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm)

费马小定理(费小):若 p p p 是质数,则对于 ∀ a ∈ Z ∀a∈Z aZ,有 a p ≡ a ( m o d    p ) a^p ≡ a(\mod p) apa(modp)

证明:对 a a a 使用数学归纳法。

Base step:当 a = 0 a = 0 a=0 时, 0 ≡ 0 ( m o d    p ) 0≡0(\mod p) 00(modp)

Inductive step:假设 a p ≡ a ( m o d    p ) a^p≡a(\mod p) apa(modp),考虑 ( a + 1 ) p (a + 1)^p (a+1)p,根据二项 式定理展开, ( a + 1 ) p = ∑ k = 0 p C p k a k (a + 1)^p = \sum_{k=0}^p C_p^ka^k (a+1)p=k=0pCpkak

由于 p p p 是质数, C p k = p ! k ! ( p − k ) ! C_p^k = \frac{p!}{k!(p-k)!} Cpk=k!(pk)!p!,则 p ∣ C p k , k ∈ [ 1 , p − 1 ] p|C_p^k,k∈[1, p-1] pCpk,k[1,p1],则 ( a + 1 ) p ≡ a p + 1 ( m o d    p ) (a + 1)^p≡a^p+1(\mod p) (a+1)pap+1(modp)

又因为 a p ≡ a ( m o d    p ) a^p≡a(\mod p) apa(modp),则 ( a + 1 ) p ≡ a p + 1 ≡ a + 1 ( m o d    p ) (a+1)^p ≡ a ^p + 1 ≡a + 1(\mod p) (a+1)pap+1a+1(modp)

根据数学归纳法,对于 ∀ a ∈ Z ∀a∈Z aZ,都成立 a p ≡ a ( m o d    p ) a^p ≡ a(\mod p) apa(modp)证毕

欧拉定理:若 a , n a, n a,n 互质, a , n ∈ N ∗ a,n ∈ N^* a,nN,则 a φ ( n ) ≡ 1 ( m o d    n ) a^{φ(n)} ≡ 1 (\mod n) aφ(n)1(modn)
其中 φ ( n ) φ(n) φ(n)欧拉函数

欧拉定理的推论:若 a , n a, n a,n互质, a , n ∈ N ∗ a,n ∈ N^* a,nN,则对于 ∀ b ∈ N ∗ ∀b∈ N^* bN,有
a b ≡ a b m o d    φ ( n ) ( m o d    n ) a^b≡a^{b \mod φ(n)} (\mod n) ababmodφ(n)(modn)

证明:

b = q φ ( n ) + r b = qφ(n) + r b=qφ(n)+r, 其中 r ∈ [ 0 , φ ( n ) ) r ∈[0,φ(n)) r[0,φ(n)) q , r ∈ N q,r ∈ N q,rN,即 r = b m o d    φ ( n ) r = b \mod φ(n) r=bmodφ(n)

于是: a b ≡ a q φ ( n ) + r ≡ ( a φ ( n ) ) q a r ≡ 1 q a r ≡ a r ≡ a b m o d    φ ( n ) ( m o d    n ) a^b ≡ a^{qφ(n)+r} ≡ (a^{φ(n)})^q a^r ≡ 1^qa^r ≡ a^r ≡ a^{b \mod φ(n)}(\mod n) abaqφ(n)+r(aφ(n))qar1qararabmodφ(n)(modn)

证毕

2.同余的性质

对于 a , b , c , d , m , n , x , p , q ( a , b , c , d , x ∈ Z , m , n , p , q ∈ N ) a,b,c,d,m,n,x,p,q(a,b,c,d,x∈Z, m,n,p,q∈N) a,b,c,d,m,n,x,p,q(a,b,c,d,xZ,m,n,p,qN)

对模 m m m 同余满足:

  1. 自反性 a ≡ a ( m o d    m ) a≡a(\mod m) aa(modm)
  2. 对称性:若 a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm),则 b ≡ a ( m o d    m ) b≡a(\mod m) ba(modm)
  3. 传递性:若 a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm) b ≡ c ( m o d    m ) b≡c(\mod m) bc(modm),则 b ≡ c ( m o d    m ) b≡c(\mod m) bc(modm)
  4. 同加性:若 a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm),则 a + c ≡ b + c ( m o d    m ) a + c≡b + c(\mod m) a+cb+c(modm)
  5. 同乘性:若 a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm),则 a c ≡ b c ( m o d    m ) ac≡bc(\mod m) acbc(modm);
    一般情况下, a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm) c ≡ d ( m o d    m ) c≡d(\mod m) cd(modm),则 a c ≡ b d ( m o d    m ) ac≡bd(\mod m) acbd(modm)
  6. 同幂性*:若 a ≡ b ( m o d    m ) a≡b(\mod m) ab(modm),则 a n ≡ b n ( m o d    m ) a^n≡b^n(\mod m) anbn(modm)
  7. a ≡ x ( m o d    p ) a≡x(\mod p) ax(modp) a ≡ x ( m o d    q ) a≡x(\mod q) ax(modq),其中 p , q p,q p,q 互质,则 a ≡ x ( m o d    p q ) a≡x(\mod pq) ax(modpq)

证明:因为 a ≡ x ( m o d    p ) a≡x(\mod p) ax(modp) a ≡ x ( m o d    q ) a≡x(\mod q) ax(modq),其中 p , q p,q p,q 互质, 则一定 ∃ s , t ∈ Z ∃s,t∈ Z s,tZ,使 a = s p + x , a = t q + x a = sp+ x, a = tq + x a=sp+x,a=tq+x,所以 s p = t q , q ∣ s , p ∣ t sp=tq,q|s,p|t sp=tq,qs,pt, 则一定 ∃ r ∈ Z ∃r∈ Z rZ,使 s = r q s = rq s=rq, 所以: a = r p q + x a = rpq+x a=rpq+x,得出 a ≡ x ( m o d    p q ) a≡x(\mod pq) ax(modpq)

  1. 但是,同余不满足同除性,及不满足 a / n ≡ b / n ( m o d    m ) a/n≡b/n(\mod m) a/nb/n(modm)

二、扩展欧几里得算法(扩欧)

1.欧几里得算法(辗转相除法)

∀ a , b ∈ N , b ≠ 0 ∀a,b∈N,b≠0 a,bN,b=0,则 g c d ( a , b ) = g c d ( b , a m o d    b ) gcd(a,b)=gcd(b,a \mod b) gcd(a,b)=gcd(b,amodb)

2.推导与证明

定理一

a , b ∈ Z a, b∈Z a,bZ,则 ∃ x , y ∈ Z ∃x,y∈Z x,yZ,使得 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)

证明:因为 g c d ( a , b ) = g c d ( b , a m o d    b ) gcd(a,b)=gcd(b,a\mod b) gcd(a,b)=gcd(b,amodb);

所以 a x + b y = b x ′ + ( a m o d    b ) y ′ ax+by=bx'+(a \mod b)y' ax+by=bx+(amodb)y
⇒ a x + b y = b x ′ + ( a − ⌊ a b ⌋ b ) y ′ ⇒ax+by=bx'+(a-\lfloor\frac{a}{b}\rfloor b)y' ax+by=bx+(abab)y

⇒ a x + b y = b x ′ + a y ′ − ⌊ a b ⌋ b y ′ ⇒ax+by=bx'+ay'-\lfloor\frac{a}{b}\rfloor by' ax+by=bx+aybaby

⇒ a x + b y = a y ′ + b ( x ′ − ⌊ a b ⌋ y ′ ) ⇒ax+by=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y') ax+by=ay+b(xbay)

⇒ x = y ′ , y = x ′ − ⌊ a b ⌋ y ′ ⇒x=y',y=x'-\lfloor\frac{a}{b}\rfloor y' x=y,y=xbay

当欧几里得算法运行到最后一步时, b = 0 b=0 b=0 g c d ( a n , b n ) = a n gcd(a_n,b_n) = a_n gcd(an,bn)=an

x = 1 , y = 0 x=1,y=0 x=1,y=0

对递推过程使用数学归纳法,可知扩欧成立。

证毕

定理二(贝祖定理)

对于不定方程 a x + b y = c ax+by=c ax+by=c,当且仅当 g c d ( a , b ) ∣ c gcd(a,b)|c gcd(a,b)c 时,方程有整数解。

证明:

已知 g c d ( a , b ) ∣ a gcd(a,b)|a gcd(a,b)a g c d ( a , b ) ∣ b gcd(a,b)|b gcd(a,b)b,由整除的性质, ∀ a , b ∈ Z ∀a,b∈Z a,bZ,则 g c d ( a , b ) ∣ a x + b y gcd(a,b)|ax+by gcd(a,b)ax+by,即
g c d ( a , b ) ∣ c gcd(a,b)|c gcd(a,b)c

3.求最小整数解

给出不定方程 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b),已知一组特解 x 0 , y 0 x_0,y_0 x0,y0,求最小整数解 x x x

推导:

因为 a x + b y = g c d ( a , b ) , a x 0 + b y 0 = g c d ( a , b ) ax +by = gcd(a,b),ax_0+by_0 = gcd(a,b) ax+by=gcd(a,b),ax0+by0=gcd(a,b),所以 a x + b y = a x 0 + b y 0 ax+by=ax_0+by_0 ax+by=ax0+by0

上式转化为 a ( x 0 − x ) = − b ( y 0 − y ) a(x_0-x)=-b(y_0-y) a(x0x)=b(y0y)

两边同除以 g c d ( a , b ) gcd(a,b) gcd(a,b),得
a g c d ( a , b ) ( x 0 − x ) = − b g c d ( a , b ) ( y 0 − y ) \frac{a}{gcd(a,b)}(x_0-x)=-\frac{b}{gcd(a,b)}(y_0-y) gcd(a,b)a(x0x)=gcd(a,b)b(y0y)

易得 a g c d ( a , b ) \frac{a}{gcd(a,b)} gcd(a,b)a b g c d ( a , b ) \frac{b}{gcd(a,b)} gcd(a,b)b 互质,则 b g c d ( a , b ) ∣ ( x 0 − x ) \frac{b}{gcd(a,b)}|(x_0-x) gcd(a,b)b(x0x) a g c d ( a , b ) ∣ ( y 0 − y ) \frac{a}{gcd(a,b)}|(y_0-y) gcd(a,b)a(y0y)

x = x 0 − k b g c d ( a , b ) , k ∈ Z x=x_0-k\frac{b}{gcd(a,b)},k∈Z x=x0kgcd(a,b)b,kZ,即 x = x 0 m o d    b g c d ( a , b ) x = x_0 \mod \frac{b}{gcd(a,b)} x=x0modgcd(a,b)b

而此时的 x x x 有可能是负数,所以还要再加上 b g c d ( a , b ) \frac{b}{gcd(a,b)} gcd(a,b)b m o d    b g c d ( a , b ) \mod \frac{b}{gcd(a,b)} modgcd(a,b)b

x = ( x 0 m o d    b g c d ( a , b ) + b g c d ( a , b ) ) m o d    b g c d ( a , b ) x=(x_0 \mod \frac{b}{gcd(a,b)} + \frac{b}{gcd(a,b)})\mod \frac{b}{gcd(a,b)} x=(x0modgcd(a,b)b+gcd(a,b)b)modgcd(a,b)b

4.代码

void exgcd(int a, int b, int &x, int &y)
{
	if(b == 0)
	{
		x = 1; y = 0;
	}
	else
	{
		int x1 = x, y1 = y;
		exgcd(b, a % b, x1, y1);
		x = y1;
		y = x1 - (a / b) * y1;
	}
} 
int gcd(int a, int b)
{
	if(b == 0)	return a;
	else	return gcd(b, a % b);
}
int main()
{
	cin >> a >> b;
	exgcd(a, b, x, y);
	d = gcd(a, b);
	cout << (x % (b / d) + b / d) % (b / d);
}

5.题目

Luogu P4549 【模板】裴蜀定理

Luogu P1082 [NOIP2012 提高组] 同余方程

Luogu P1516 青蛙的约会

三、线性同余方程

定义一

给定 a , b , c ∈ Z a,b,c∈Z a,b,cZ,求 x ∈ Z x∈Z xZ,使得 a x ≡ c ( m o d    b ) ax≡c(\mod b) axc(modb),或者给出无解。

因为未知数的系数为1,所以我们称之为一次同余方程,也称线性同余方程

原方程等价于 a x − c ≡ 0 ( m o d    b ) ax-c≡0(\mod b) axc0(modb),即 ∃ y ∈ Z ∃y∈Z yZ,使得 − b y = ( a x − c ) -by=(ax-c) by=(axc),即 a x + b y = c ax+by=c ax+by=c

因此当 g c d ( a , b ) ∣ c gcd(a,b)|c gcd(a,b)c 时,使用扩欧求解即可。

换而言之,有解的线性同余方程皆可用扩欧求解

定义二

特别地,当 g c d ( a , b ) = 1 gcd(a,b) = 1 gcd(a,b)=1(即 a , b a,b a,b 互质时),则称 a x ≡ 1 ( m o d    b ) ax≡1(\mod b) ax1(modb) 的一个解为 a a a b b b 的逆。

四、乘法逆元

给定 a , b ∈ Z a,b∈Z a,bZ a , b a,b a,b 互质,则 ∃ x ∈ Z ∃x∈Z xZ,使得 a x ≡ 1 ( m o d    b ) ax≡1(\mod b) ax1(modb),称 x x x a a a 的模 b b b 乘法逆元,记作 1 a ( m o d    b ) \frac{1}{a}(\mod b) a1(modb) a − 1 ( m o d    b ) a^{-1}(\mod b) a1(modb)

1.扩欧求逆元

a x ≡ 1 ( m o d    b ) ax≡1(\mod b) ax1(modb) 转化为 a x + b y = 1 ax+by = 1 ax+by=1 ,因为 a , b a,b a,b 互质,所以 g c d ( a , b ) ∣ 1 gcd(a,b)|1 gcd(a,b)1,使用扩欧求解即可。

#include <iostream>
using namespace std;
int m, n, x, y;
void exgcd(int a, int b, int &x,int &y)
{
	if(b == 0)
		x = 1, y = 0;
	else
	{
		int x2, y2;
		exgcd(b, a % b, x2, y2);
		x = y2;
		y = x2- (a / b) * y2;
	}
}

2.快速幂求逆元

a − 1 ≡ a b − 2 ( m o d    b ) a^{-1} ≡a^{b-2}(\mod b) a1ab2(modb)

当b为质数时,由费小得, a b − 1 ≡ 1 ( m o d    b ) a^{b-1}≡1(\mod b) ab11(modb),则 a ⋅ a b − 2 ≡ 1 ( m o d    b ) a·a^{b-2}≡1(\mod b) aab21(modb),即 a − 1 ≡ a b − 2 ( m o d    b ) a^{-1} ≡a^{b-2}(\mod b) a1ab2(modb),使用快速幂求出 a b − 2 a^{b-2} ab2 即可。

int quickpow(int a, int b)
{
	long long p = b - 2, ans = 1;
	while(p != 0)
	{
		if(p & 1)
			ans = ans * a % b;
		p >>= 1;
		a = a * a % b; 
	}
	return ans % b;
} 

3.递推求逆元

求整数 i = 1... M − 1 i=1...M-1 i=1...M1 M M M 的逆元 i n v [ i ] inv[i] inv[i],则 i n v [ i ] = ( M − ⌊ M / i ⌋ ) ⋅ i n v [ M m o d    i ] m o d    M inv[i]=(M-\lfloor M/i \rfloor)·inv[M\mod i]\mod M inv[i]=(MM/i)inv[Mmodi]modM

推导过程:

t = ⌊ M / i ⌋ t = \lfloor M/i \rfloor t=M/i k = M m o d    i k = M \mod i k=Mmodi.

k ≡ M − t i ( m o d    M ) k≡M-ti(\mod M) kMti(modM)

⇒ k + t i ≡ M ( m o d    M ) ⇒k+ti≡M(\mod M) k+tiM(modM)

⇒ k + t i ≡ 0 ( m o d    M ) ⇒k+ti≡0(\mod M) k+ti0(modM)

⇒ − t i ≡ k ( m o d    M ) ⇒-ti≡k(\mod M) tik(modM)

两边同时除以 i k ik ik,得

− t k ≡ 1 i ( m o d    M ) -\frac{t}{k}≡\frac{1}{i}(\mod M) kti1(modM)

⇒ − t k − 1 ≡ i − 1 ( m o d    M ) ⇒-tk^{-1}≡i^{-1}(\mod M) tk1i1(modM)

⇒ − t ⋅ i n v [ k ] ≡ i n v [ i ] ( m o d    M ) ⇒-t·inv[k]≡inv[i](\mod M) tinv[k]inv[i](modM)

t t t k k k 替换掉,得

i n v [ i ] = − ⌊ M / i ⌋ ⋅ i n v [ M m o d    i ] m o d    M inv[i]=-\lfloor M/i \rfloor·inv[M\mod i]\mod M inv[i]=M/iinv[Mmodi]modM

⇒ i n v [ i ] = ( M − ⌊ M / i ⌋ ) ⋅ i n v [ M m o d    i ] m o d    M ⇒inv[i]=(M-\lfloor M/i \rfloor)·inv[M\mod i]\mod M inv[i]=(MM/i)inv[Mmodi]modM

void invmod(int m)
{
	inv[1] = 1;
	for(int i = 2; i < m; i++)
		inv[i] = (m - m / i) * inv[m % i] % m;
} 

4.阶乘求逆元

	fact[0] = 1;
	for(re ll i = 1; i <= n; i++)	fact[i] = fact[i - 1] * i % mod;
	inv[n] = exgcd(n, mod, x, y);
	for(re ll i = n - 1; i >= 1; i--)	inv[i] = inv[i + 1] * (i + 1) % mod;

5.题目

Luogu P3811【模板】乘法逆元

五、中国剩余定理(CRT)

1.定理

今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
答曰:‘二十三’。
术曰:三三数之剩二,置一百四十;五五数之剩三,置六十三,七七数之剩二,置三十,并之。得二百三十三,以二百一十减之,即得。凡三三数之剩一,则置七十;五五数之剩一,则置二十一;七七数之剩一,则置十五;一百六以上以一百五减之即得。
——《孙子算经》

找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70。

用15乘以2(2为最终结果除以7的余数),用21乘以3(3为最终结果除以5的余数),同理,用70乘以2(2为最终结果除以3的余数),然后把三个乘积相加15∗2+21∗3+70∗2得到和233。

用233除以3,5,7三个数的最小公倍数105,得到余数23,即233%105=23。这个余数23就是符合条件的最小数。

以上就是孙子定理,国际上称为中国剩余定理(CRT),定理如下:

m 1 , m 2 … m n m_1,m_2…m_n m1,m2mn两两互质的正整数, M = ∏ i = 1 n m i M = \prod^n_{i=1}m_i M=i=1nmi M i = M / m i M_i=M/m_i Mi=M/mi t ≡ M i − 1 ( m o d    m i ) t≡M_i^{-1}(\mod m_i) tMi1(modmi)。对于 ∀ a 1 , a 2 … a n ∈ Z ∀a_1,a_2…a_n∈Z a1,a2anZ,则同余方程组
{ x ≡ a 1 ( m o d    m 1 ) x ≡ a 2 ( m o d    m 2 ) … … x ≡ a n ( m o d    m n ) \left\{\begin{matrix} &x≡a_1(\mod m_1) \\ &x≡a_2(\mod m_2) \\ &…… \\ &x≡a_n(\mod m_n) \end{matrix}\right. xa1(modm1)xa2(modm2)xan(modmn)
有整数解,方程组的解为 x = ∑ i = 1 n a i M i t i x=\sum^n_{i=1}a_iM_it_i x=i=1naiMiti并且在模 M M M 意义下有唯一解。

推导: 设 x i ≡ a i ( m o d    m i ) x_i≡a_i(\mod m_i) xiai(modmi)

a ≡ c ( m o d    b ) ⇔ a + k b ≡ c ( m o d    b ) a≡c(\mod b)⇔a+kb≡c(\mod b) ac(modb)a+kbc(modb) 可知,要使 x ≡ a i ( m o d    m i ) x≡a_i(\mod m_i) xai(modmi),则 x i x_i xi 是除
m i m_i mi 之外所有模数的倍数。

又因为模数两两互质,所以 x i x_i xi M i = M / m i M_i=M/m_i Mi=M/mi 的倍数, M i M_i Mi 也是除 m i m_i mi 以外的模数的最小公倍数。

n i = x i M i n_i=\frac{x_i}{M_i} ni=Mixi,则 n i M i ≡ a i ( m o d    m i ) n_iM_i ≡ a_i(\mod m_i) niMiai(modmi),两边同时除以 a i a_i ai,则
n i a i M i ≡ 1 ( m o d    m i ) \frac{n_i}{a_i}Mi≡1(\mod m_i) ainiMi1(modmi),则 t i = x i a i M i t_i=\frac{x_i}{a_iM_i} ti=aiMixi

x i = a i M i t i x_i=a_iM_it_i xi=aiMiti x = ∑ i = 1 n a i M i t i x=\sum^n_{i=1}a_iM_it_i x=i=1naiMiti

2.代码

int Crt()
{
	int ans = 0, M = 1, Mi, x, y;
	for(int i = 1; i <= n; i++)
		M *= m[i];
	for(int i = 1; i <= n; i++)
	{
		Mi = M / m[i];
		exgcd(Mi, m[i], x, y);
		ans = (ans + Mi * a[i] * x) % M;
	}
	return (ans + M) % M;
}

3.题目

Luogu P1495 【模板】中国剩余定理(CRT)/曹冲养猪

六、扩展中国剩余定理 (EXCRT)

1.定理

给定 n n n 组非负整数 a i , m i a_i, m_i ai,mi,求解关于 x x x 的方程组的最小非负整数解。

{ x ≡ a 1 ( m o d    m 1 ) x ≡ a 2 ( m o d    m 2 ) … … x ≡ a n ( m o d    m n ) \left\{\begin{matrix} &x≡a_1(\mod m_1) \\ &x≡a_2(\mod m_2) \\ &…… \\ &x≡a_n(\mod m_n) \end{matrix}\right. xa1(modm1)xa2(modm2)xan(modmn)

推导:

x 0 ≡ a i − 1 ( m o d    m i − 1 ) x_0 ≡ a_{i-1}(\mod m_{i-1}) x0ai1(modmi1) x 0 ≡ a i ( m o d    m i ) , i = 2 … n x_0≡a_i(\mod m_i),i=2…n x0ai(modmi),i=2n,

k m 1 + a 1 = − k ′ m 2 + a 2 , k , k ′ ∈ Z km_1+a_1=-k'm_2+a_2,k,k'∈Z km1+a1=km2+a2,k,kZ

上式可化为 k m 1 + k ′ m 2 = a 2 − a 1 km_1+k'm_2=a_2-a_1 km1+km2=a2a1,求得最小正整数解 k , k ′ k,k' k,k

k , k ′ k,k' k,k 代入原式,可求得 x 0 x_0 x0

则此时 x ≡ x 0 ( m o d    l c m ( m i − 1 , m i ) ) x≡x_0(\mod lcm(m_{i-1},m_i)) xx0(modlcm(mi1,mi))

将上式与下一式联立,用上述方法持续求解,直到 i = n i=n i=n时即可。

2.代码

int excrt()
{
	for(int i = 2; i <= n; i++)
	{
		a = M[i - 1]; b = M[i]; c = A[i] - A[i - 1];
		d = exgcd(a, b, x, y);
		x = (x * (c / d) % (b / d) + (b / d)) % (b / d);
		A[i] = a * b / d;
		B[i] = x * a + B[i - 1];
	}
	return B[n];
}

3.题目

Luogu P4777 【模板】扩展中国剩余定理(EXCRT)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值