约定

  • \(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\)

模板题。大家可以参考一下我的代码实现:

#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)学习笔记的更多相关文章

  1. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

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

    先扔个模板题.链接. 简化题意:他让我求 \(x \equiv a_i \pmod{m_i}\) 的解. 例如,\( \begin{cases} x \equiv 1 \pmod{3} \\ x \e ...

  3. 中国剩余定理 CRT

    中国剩余定理 CRT 正常版本CRT 要解的是一个很容易的东西 \[ \begin{aligned} x\equiv a_1(mod\ m_1)\\ x\equiv a_2(mod\ m_2)\\ . ...

  4. 中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结

    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结 标签:数学方法--数论 阅读体验:https://zybuluo.com/Junlier/note/1300035 前置浅讲 前 ...

  5. 中国剩余定理(CRT)及其扩展(EXCRT)详解

    问题背景   孙子定理是中国古代求解一次同余式方程组的方法.是数论中一个重要定理.又称中国余数定理.一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作<孙子算经>卷下第 ...

  6. 扩展GCD 中国剩余定理(CRT) 乘法逆元模版

    extend_gcd: 已知 a,b (a>=0,b>=0) 求一组解 (x,y) 使得 (x,y)满足 gcd(a,b) = ax+by 以下代码中d = gcd(a,b).顺便求出gc ...

  7. 扩展中国剩余定理 (ExCRT)

    扩展中国剩余定理 (ExCRT) 学习笔记 预姿势: 扩展中国剩余定理和中国剩余定理半毛钱关系都没有 问题: 求解线性同余方程组: \[ f(n)=\begin{cases} x\equiv a_1\ ...

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

    引入 常想起在空间里见过的一些智力题,这个题你见过吗: 一堆苹果,\(3\)个\(3\)个地取剩\(1\)个,\(5\)个\(5\)个地取剩\(1\)个,\(7\)个\(7\)个地取剩\(2\)个,苹 ...

  9. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  10. 中国剩余定理(CRT)及其拓展(ExCRT)

    中国剩余定理 CRT 推导 给定\(n\)个同余方程 \[ \left\{ \begin{aligned} x &\equiv a_1 \pmod{m_1} \\ x &\equiv ...

随机推荐

  1. k8s集群跨namespace访问服务

    场景:自己有一个java应用部署在test命名空间下,但是一直无法访问到middleware命名空间下的mysql服务 查找资料发现下面所说的问题 我们通常会把mysql,redis,rabbitmq ...

  2. Windows 10 输入法(仅桌面) %100 解决

    大家好,今天我遇到了一件非常难受的一件事,那就是 WIndows 自带的输入发问题,无法输入中文!!! 这时我去网上找找解决方案,总结了一下几个: 文件检查 步骤 以管理员身份运行PowerShell ...

  3. sql 查询大数据 常用 50列优化

    大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到. 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能 ...

  4. VUE配置proxy代理、开发环境、测试环境、生产环境

    VUE配置proxy代理.开发环境.测试环境.生产环境 前端开发过程中,我们经常会碰到跨域的问题,下面我们来配置下,不同的环境下,统一的跨域问题解决. 1.根目录下新建三个环境的配置文件,.env.d ...

  5. Servlet和Maven项目

    Servlet执行流程 通过默认端口号访问到Tomcat服务器 通过类名访问到对应的项目 通过自定义的相应路径,访问到注释中的同名路径 即为执行流程 相应的Servlet对象由Tomcat服务器创建, ...

  6. 第一章C语言概述

    1.1程序实例 //first.程序 #include <stdio.h> int main() { int num; num = 1; printf("I am a simpl ...

  7. 使用K8S进行蓝绿部署的简明实操指南

    在之前的应用部署系列文章里,我们已经介绍过什么是蓝绿部署.如需回顾,点击下方文章链接即可重温.本文我们将会介绍如何使用 Kubernetes 实现蓝绿部署. 应用部署初探:3个主要阶段.4种常见模式 ...

  8. smart rtmpd 服务器配置文件说明及优化方法介绍

    ---------------------------------------------------------------------------------------------------- ...

  9. WPF随笔收录-解析DICOM文件

    一.前言 在最近的项目开发中,涉及到了解析DICOM文件.根据百度百科可知,DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通 ...

  10. 记录关于Chromium系浏览器密码安全问题的一些思考

    首先就是在此之前就看到有相关报道讲到Chrome等浏览器密码都在本地明文存储,而且权限要求很低,任何程序都可以随意读取,这方面的安全问题暂且不表. 今天使用Edge时候发现浏览器储存的密码,在我已经设 ...