中国剩余定理(CRT)学习笔记

这篇具有很好参考价值的文章主要介绍了中国剩余定理(CRT)学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

约定

  • \(A\perp B\) 表示 \(\gcd(A,B)=1\)
  • \(A\mid B\) 表示 \(B\equiv 0\pmod{A}(A\neq0)\)

引入

考虑以下这道题:

有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。 問物幾何?—— 《孫子算經》

也就是说,求出下列关于 \(x\) 方程组的最小整数解:

\[\begin{cases} x\equiv2\pmod{3}\\ x\equiv3\pmod{5}\\ x\equiv2\pmod{7} \end{cases} \]

解析

首先我们考虑什么时候 \(\equiv3\pmod{3}\),什么时候 \(\equiv3\pmod{5}\),什么时候 \(\equiv2\pmod{7}\)。也就是解下面的方程:

\[\begin{cases} x_1\equiv2\pmod{3}\\ x_2\equiv3\pmod{5}\\ x_3\equiv2\pmod{7} \end{cases} \]

解得:

\[\begin{cases} x_1=3k_1+2&(k_1\in\mathbb{Z})\\ x_2=5k_2+3&(k_2\in\mathbb{Z})\\ x_3=7k_3+2&(k_3\in\mathbb{Z})\\ \end{cases} \]

但这个解毫无用处。因为我们无法直接从 \(x_1,x_2,x_3\) 求出 \(x\)

一种常见的想法是,取 \(x=x_1+x_2+x_3\)。那我们就有结论 \(x_1+x_2\equiv2\pmod{3}\)

这个结论显然只在 \(3\mid x_2\) 时成立。

因此我们可以得到,令 \(x_1=(5\cdot7)y_1,x_2=(3\cdot7)y_2,x_3=(3\cdot5)y_3\),则:

\[\begin{cases} 35y_1\equiv2\pmod{3}\\ 21y_2\equiv3\pmod{5}\\ 15y_3\equiv2\pmod{7} \end{cases} \]

然后发现 \(\equiv\) 右边的数字不是 \(1\) 就非常烦。我们令 \(z_1=2y_1,z_2=3y_2,z_3=2y_3\),再分别约去 \(2,3,2\) 得到:

\[\begin{cases} 35z_1\equiv1\pmod{3}\\ 21z_2\equiv1\pmod{5}\\ 15z_3\equiv1\pmod{7} \end{cases} \]

注意到 \(3\perp5\perp7\),则 \(35\perp3,21\perp5,15\perp7\)。所以存在逆元(存在 \(z_1,z_2,z_3\))。这个可以用扩展欧几里得或者线性求逆元来求出 \(z_1=2,z_2=1,z_3=1\)

\(y_1=4,y_2=3,y_3=2\)\(x_1=140,x_2,=63,x_3=30\)。则 \(x=233\)

但是 \(233\) 并不是最小正整数解。不难发现只要 \(a\equiv b\pmod{3\cdot5\cdot7}\),那么 \(a,b\) 都是合法解。

所以最小正整数解是 \(233\bmod (3\cdot5\cdot7)=23\)

整理

现在,我们就得到了求解下列方程组的通法:

\[\begin{cases} x\equiv b_1\pmod{a_1}\\ x\equiv b_2\pmod{a_2}\\ \cdots\cdots\cdots\cdots\cdots\cdot\cdot\\ x\equiv b_n\pmod{a_n}\\ \end{cases} \]

其中 \(a_1\perp a_2\perp\cdots a_n\)

  • 求出 \(K=\prod_{i=1}^{n}a_i\)

  • 对于 \(1 \leq i \leq n\),解关于 \(z_i\) 的方程 \(\dfrac{K}{a_i}\cdot z_i\equiv1\pmod{a_i}\)

  • 计算 \(y_i=b_i\cdot z_i \cdot \dfrac{K}{a_i}\)

  • 则最小整数解 \(x=\sum_{i=1}^{n}{y_i} \bmod K\)

例题

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

给出两个长为 \(n\) 的序列 \(a,b\)。求以下关于 \(x\) 的方程组的最小整数解:

\[\begin{cases} x\equiv b_1\pmod{a_1}\\ x\equiv b_2\pmod{a_2}\\ \cdots\cdots\cdots\cdots\cdots\cdot\cdot\\ x\equiv b_n\pmod{a_n}\\ \end{cases} \]

\(1 \leq n \leq 10\)

模板题。大家可以参考一下我的代码实现:文章来源地址https://www.toymoban.com/news/detail-429277.html

#include <bits/stdc++.h>
#define int long long
using namespace std;

void exgcd(int a,int b,int &x,int &y){
	if(b==0){
		x=1;
		y=0;
	}
	else{
		exgcd(b,a%b,x,y);
		int tmp=x;
		x=y;
		y=tmp-a/b*y;
	}
}

int n,a[15],b[15];

signed main(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
    int K=1,x=0;
    for(int i=1;i<=n;i++) K*=a[i];
    for(int i=1;i<=n;i++){
        int z=0,ytxy=0,y=0;
        exgcd(K/a[i],a[i],z,ytxy);
        z=((z%a[i]+a[i])%a[i]);
        y=b[i]*z*(K/a[i]);
        x+=y;
    }
    cout<<((x%K+K)%K);
    return 0;
}

到了这里,关于中国剩余定理(CRT)学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中国剩余定理以及扩展中国剩余定理

    中国剩余定理必须有两两互质的条件;而扩展中国剩余定理没有限制(可能互质,也能不互质)。所以只记忆一个扩展中国剩余定理的板子就行. 题目 难度 AcWing.表达整数的奇怪方式 模板题

    2024年02月13日
    浏览(52)
  • 算法基础-数学知识-欧拉函数、快速幂、扩展欧几里德、中国剩余定理

    互质就是两个数的最大公因数只有1,体现到代码里面就是 a和b互质,则b mod a = 1 mod a (目前我不是很理解,但是可以这样理解:a和b的最大公因数是1,即1作为除数和b作为除数时,对于被除数a来说余数是一样的,即1/a的余数和b/a是一样的,即 b mod a = 1 mod a ) 欧拉函数的作用是

    2024年02月09日
    浏览(43)
  • 数论——欧拉函数、欧拉定理、费马小定理 学习笔记

    定义 欧拉函数(Euler\\\'s totient function),记为 (varphi(n)) ,表示 (1 sim n) 中与 (n) 互质的数的个数。 也可以表示为: (varphi(n) = sumlimits_{i = 1}^n [gcd(i, n) = 1]) . 例如: (varphi(1) = 1) ,即 (gcd(1, 1) = 1) ; (varphi(2) = 1) ,即 (gcd(1, 2) = 1) ; (varphi(3) = 2) ,即 (gcd(1, 3

    2024年02月08日
    浏览(42)
  • 数论——卢卡斯定理、求组合数 学习笔记

    温馨提示:组合数一般较大,下面的示范代码均无视数据范围,如果爆 int 请自行开 long long 或高精度处理。 从 (n) 个不同元素中,任取 (m) 个元素组成一个集合,叫做从 (n) 个不同元素中取出 (m) 个元素的一个组合;从 (n) 个不同元素中取出 (m leq n) 个元素的所有组合

    2024年02月08日
    浏览(40)
  • 最小表示法学习笔记

    一个字符串 (S) 的最小表示法为该字符串所有循环同构字符串中字典序最小的一个。 比如: (abca) ,对于他,循环同构字符串就有 (aabc) , (caab) , (bcaa) ,其中字典序最小的是 (aabc) 。那么我们说 (aabc) 就是 (abca) 最小表示法。 考虑对于一对子串 (A,B) ,它们在原字

    2024年02月11日
    浏览(44)
  • 数论——欧几里得算法、裴蜀定理、扩展欧几里得算法 学习笔记

    最大公约数 最大公约数即为 Greatest Common Divisor,常缩写为 gcd。 一组整数的公约数,是指同时是这组数中每一个数的约数的数。 (pm 1) 是任意一组整数的公约数; 一组整数的最大公约数,是指所有公约数里面最大的一个。 特殊的,我们定义 (gcd(a, 0) = a) 。 最小公倍数 最

    2024年02月08日
    浏览(44)
  • 『CV学习笔记』深度理解半精度float16的表示

    『CV学习笔记』深度理解半精度float16的表示 深度学习中 int8、float16、float32 的主要却别在于能表示的 数值范围、数值精度 。 半精度是英伟达在2002年搞出来的,双精度和单精度是为了计算, 而半精度更多是为了降低数据传输和存储成本 。很多场景对于精度要求也没那么高,

    2024年02月03日
    浏览(36)
  • html学习之路:简述html文档头部 <meta> 的 http-equiv 属性

    🧋当输入网址打开网页时,设置html头部 meta 的 http-equiv 属性,可以帮助浏览器更加精确和正常却的显示网页内容,比如设置网页多久自动刷新,设置网页在浏览器缓存中的时限,设置多少事件跳转到指定的网页地址,应对低版本浏览器的渲染兼容问题,以什么样动态的样式

    2024年02月02日
    浏览(44)
  • 《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记

    写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理总结,希望读者理解。 《深入理解计算机

    2024年02月07日
    浏览(58)
  • 青岛大学_王卓老师【数据结构与算法】Week05_06_栈的顺序表示_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周06–3.3栈的表示和实现2–3.

    2024年02月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包