第三十章 数论——扩展中国剩余定理
创始人
2024-05-02 07:02:37
0

第三十章 数论——扩展中国剩余定理

  • 一、中国剩余定理的弊端
  • 二、扩展中国剩余定理
    • 1、作用
    • 2、内容
    • 3、问题
    • 4、代码

一、中国剩余定理的弊端

在第二十九章中,作者详细地讲解了中国剩余定理的使用,在开始本章节的讲解之前,建议读者先去看上一章节的讲解。传送门:中国剩余定理与线性同余方程组

中国剩余定理是用来解决线性同余方程组的,但是有一个很苛刻的要求就是:方程组中的同余方程的模数必须是互质的。只有这样我们才能套用中国剩余定理。

二、扩展中国剩余定理

1、作用

扩展中国剩余定理就是为了解决方程组中模数不互质的情况。

2、内容

{x≡a1mod(m1)x≡a2mod(m2)x≡a3mod(m3)...x≡anmod(mn)\begin{cases} x\equiv a_1\ mod(m_1)\\ x\equiv a_2\ mod(m_2)\\ x\equiv a_3\ mod(m_3)\\ ...\\ x\equiv a_n\ mod(m_n) \end{cases} ⎩⎧​x≡a1​ mod(m1​)x≡a2​ mod(m2​)x≡a3​ mod(m3​)...x≡an​ mod(mn​)​
我们取出前两个式子:

x≡a1mod(m1)x≡a2mod(m2)x\equiv a_1\ mod(m_1)\\ x\equiv a_2\ mod(m_2)\\ x≡a1​ mod(m1​)x≡a2​ mod(m2​)

这两个式子能够写成:
x=k1m1+a1x=k2m2+a2x=k_1m_1+a_1\\ x=k_2m_2+a_2 x=k1​m1​+a1​x=k2​m2​+a2​
两个式子相减:
k1m1+a1=k2m2+a2k_1m_1+a_1=k_2m_2+a_2k1​m1​+a1​=k2​m2​+a2​
将上面的式子移项:
k1m1−k2m2=a2−a1k_1m_1-k_2m_2=a_2-a_1k1​m1​−k2​m2​=a2​−a1​

我们把k1k_1k1​和−k2-k_2−k2​看作xkx_kxk​和yky_kyk​。

那么这个式子就可以写成:
xkm1+ykm2=(a2−a1)x_km_1+y_km_2=(a_2-a_1)xk​m1​+yk​m2​=(a2​−a1​)

根据我们的裴蜀定理:

如果gcd(m1,m2)∣(a2−a1)gcd(m_1,m_2)|(a_2-a_1)gcd(m1​,m2​)∣(a2​−a1​)

我们就能够根据扩展欧几里德算法计算出系数。

如果上述整除的关系不成立,说明这个式子是无解的。

我们现在来讨论整除关系成立的情况:

我们可以根据欧几里得算法计算出:

x0m1+y0m2=gcd(m1,m2)x_0m_1+y_0m_2=gcd(m1,m2)x0​m1​+y0​m2​=gcd(m1,m2)的特殊解。

为了得到我们的xkx_kxk​和yky_kyk​,我们需要给两遍同乘(a2−a1)gcd(m1,m2)\frac{(a_2-a_1)}{gcd(m_1,m_2)}gcd(m1​,m2​)(a2​−a1​)​

所以我们的xxx和yyy的特殊解可以写成:

xk1=x0∗(a2−a1)gcd(m1,m2)yk1=y0∗(a2−a1)gcd(m1,m2)x_{k1}=x_0*\frac{(a_2-a_1)}{gcd(m_1,m_2)}\\ y_{k1}=y_0*\frac{(a_2-a_1)}{gcd(m_1,m_2)}xk1​=x0​∗gcd(m1​,m2​)(a2​−a1​)​yk1​=y0​∗gcd(m1​,m2​)(a2​−a1​)​

但是这是一组特殊解:

当我们式子为:

x0m1+y0m2=n∗gcd(m1,m2)x_0m_1+y_0m_2=n*gcd(m1,m2)x0​m1​+y0​m2​=n∗gcd(m1,m2)

此时我们可以通过特殊解构造出一般解:

我们构造的原则是下面的等式恒成立

x0m1+y0m2=gcd(m1,m2)x_0m_1+y_0m_2=gcd(m1,m2)x0​m1​+y0​m2​=gcd(m1,m2)

因此我们给我们的特殊解进行如下变形:

xk=xk1+m2gcd(m1,m2)∗nyk=yk1−m1gcd(m1,m2)∗nx_k=x_{k1}+\frac{m_2}{gcd(m_1,m_2)}*n\\ y_k=y_{k1}-\frac{m_1}{gcd(m_1,m_2)}*nxk​=xk1​+gcd(m1​,m2​)m2​​∗nyk​=yk1​−gcd(m1​,m2​)m1​​∗n

我们将这两个式子带回:x0m1+y0m2=gcd(m1,m2)x_0m_1+y_0m_2=gcd(m1,m2)x0​m1​+y0​m2​=gcd(m1,m2)

发现依然是成立的。

所以我们构造的xkx_{k}xk​和yky_{k}yk​就是通解

此时带回我们的
x=k1m1+a1x=k_1m_1+a_1x=k1​m1​+a1​
我们前面是将k1k_1k1​看作了xkx_kxk​,所以我们的式子可以变形为:
x=m2∗m1gcd(m1,m2)∗n+xk1∗m1+a1x=\frac{m_2*m_1}{gcd(m_1,m_2)}*n+x_{k1}*m_1+a_1x=gcd(m1​,m2​)m2​∗m1​​∗n+xk1​∗m1​+a1​

而m2∗m1gcd(m1,m2)\frac{m_2*m_1}{gcd(m_1,m_2)}gcd(m1​,m2​)m2​∗m1​​就是我们的最小公倍数。因为:

最大公因数∗最小公倍数=两个数的乘积最大公因数*最小公倍数=两个数的乘积最大公因数∗最小公倍数=两个数的乘积

所以我们让:

lcm(m1,m2)=m2∗m1gcd(m1,m2)lcm(m_1,m_2)=\frac{m_2*m_1}{gcd(m_1,m_2)}lcm(m1​,m2​)=gcd(m1​,m2​)m2​∗m1​​

所以我们的式子可以化简为:
x=lcm(m1,m2)∗n+xk1m1+a1x=lcm(m_1,m_2)*n+x_{k1}m_1+a_1x=lcm(m1​,m2​)∗n+xk1​m1​+a1​

而这个式子可以写成:

x≡r(modm)x\equiv r(mod\ m)x≡r(mod m)

其中:

{r=k1m1+a1m=lcm(m1,m2)\begin{cases} r={k_1}m_1+a_1\\ m=lcm(m_1,m_2) \end{cases} {r=k1​m1​+a1​m=lcm(m1​,m2​)​

经过上述推导,我们将两个同余方程:

x=k1m1+a1x=k2m2+a2x=k_1m_1+a_1\\ x=k_2m_2+a_2 x=k1​m1​+a1​x=k2​m2​+a2​

合并成了一个同余方程:

x≡r(modm)x\equiv r(mod\ m)x≡r(mod m)

因此,我们只需要不断地去合并,经过n−1n-1n−1次合并,我们就能够把nnn个同余方程合并成一个同余方程。

当只有一个合并方程的时候,我们肯定就能够利用扩展欧几里得算法进行计算了。

3、问题

在这里插入图片描述

4、代码

#include 
#include 
using namespace std;
typedef long long LL;
LL exgcd(LL a, LL b, LL &x, LL &y)
{if (!b){x = 1, y = 0;return a;}LL d = exgcd(b, a % b, y, x);y -= a / b * x;return d;
}
int main()
{int n;cin >> n;LL x = 0, m1, a1;cin >> m1 >> a1;for (int i = 0; i < n - 1; i ++ ){LL m2, a2;cin >> m2 >> a2;LL k1, k2;LL d = exgcd(m1, m2, k1, k2);if ((a2 - a1) % d){x = -1;break;}k1 *= (a2 - a1) / d;k1 = (k1 % (m2/d) + m2/d) % (m2/d);x = k1 * m1 + a1;LL m = abs(m1 / d * m2);a1 = k1 * m1 + a1;m1 = m;}if (x != -1) x = (a1 % m1 + m1) % m1;cout << x << endl;return 0;
}

相关内容

热门资讯

留香作文500字 【推荐】留香作文500字(精选28篇)  在日常学习、工作或生活中,大家总免不了要接触或使用作文吧,...
糊涂蛋的作文350字 糊涂蛋的作文350字五篇  篇一:我的糊涂老爸 詹亦乔  我有一个疼我爱我的爸爸。他虽然个子不高,却...
我的收藏优秀作文 我的收藏优秀作文(通用41篇)  在平平淡淡的学习、工作、生活中,大家都经常看到作文的身影吧,借助作...
对话作文200字 对话作文200字(通用22篇)  无论是身处学校还是步入社会,大家最不陌生的就是作文了吧,作文根据体...
我懂得了珍惜时间作文800字 我懂得了珍惜时间作文800字(精选32篇)  要想写好作文,优秀的题材是少不了的,所以平常要多少读书...
墙的作文 关于墙的作文12篇  在现实生活或工作学习中,大家总免不了要接触或使用作文吧,作文根据写作时限的不同...
我的好伙伴800字作文 我的好伙伴800字作文(精选4篇)  在平平淡淡的日常中,大家最不陌生的就是作文了吧,作文一定要做到...
会走的小岛作文250字 会走的小岛作文250字  会走的小岛  一只小蚂蚁,它在水里洗澡。看见一座小岛,于是就向小岛游去,还...
描写兰花的作文 描写兰花的作文  在日常的学习、工作、生活中,大家都写过作文吧,借助作文可以提高我们的语言组织能力。...
表情帝作文400字 表情帝作文400字(精选23篇)  在平平淡淡的日常中,大家总免不了要接触或使用作文吧,根据写作命题...
夏夜的星空作文 夏夜的星空作文400字(精选30篇)  在现实生活或工作学习中,大家都不可避免地会接触到作文吧,作文...
中医的名言警句 关于中医的名言警句  名言警句,是指一些名人或普通人说的,写的,历史纪录的,经过实践所得出的结论 或...
我最在乎的人是你作文 我最在乎的人是你作文如果觉得很不错,欢迎点评和分享~感谢你的阅读与支持!  远去的飞鸟,永恒的牵挂是...
清明离殇情为题的作文 关于清明离殇情为题的作文(通用10篇)  在我们平凡的日常里,大家都经常看到作文的身影吧,作文是从内...
欣喜若狂作文 欣喜若狂作文(精选10篇)  无论是身处学校还是步入社会,大家都跟作文打过交道吧,作文可分为小学作文...
蒲公英作文300字_小学生作... 蒲公英作文300字_小学生作文  在日常学习、工作抑或是生活中,说到作文,大家肯定都不陌生吧,作文要...
秋天到了作文300字 秋天到了作文300字8篇  在日复一日的学习、工作或生活中,许多人都有过写作文的经历,对作文都不陌生...
他笑了作文450字 他笑了作文范文450字(通用17篇)  在平平淡淡的学习、工作、生活中,大家都写过作文,肯定对各类作...
写那一刻的作文 关于写那一刻的作文(精选20篇)  在日常学习、工作和生活中,大家都跟作文打过交道吧,作文是由文字组...
生活中的微感动作文 生活中的微感动作文  在日常学习、工作或生活中,说到作文,大家肯定都不陌生吧,作文是经过人的思想考虑...