设正整数$m_1, m_2, ... , m_r$两两互素,对于同余方程组

$x ≡ a_1 \ (mod \ m_1)$

$x ≡ a_2 \ (mod \ m_2)$

$...$

$x ≡ a_r \ (mod \ m_r)$

有整数解。设$P = \prod\limits_{k = 1}^{r} m_k$,则有

$$x ≡ a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + ... + a_r M_r M_r^{-1}\ ( \ mod \ P)$$

其中,$M_i = \frac{P}{m_i}$,$M_i^{-1}$为$M_i$在模$m_i$意义下的乘法逆元

证明:

对于每一个同余方程分开求解,设各个方程的解分别为$x_i$,则答案为$\sum\limits_{i = 1}^{r}x_i$。

若对于$k≠i$,都有$m_k|x_i$,则最终累积答案的时候对当前同余方程产生影响的只有$x_i$

因此$x_i$应当为$\frac{P}{m_i}$的倍数,且满足$x_i ≡ a_i \ (mod \ m_i)$

由于$M_i = \frac{P}{m_i}$,因此求出$M_i$在模$m_i$意义下的逆元$M_i^{-1}$,可得$M_i M_i^{-1} ≡ 1 \ (mod \ m_i)$

同时乘以$a_i$即可得$a_i M_i M_i^{-1} ≡ a_i \ (mod \ m_i)$

由于$x_i ≡ a_i M_i M_i^{-1} \ (mod \ m_i)$

所以$x = a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + ... + a_r M_r M_r^{-1}$

若要求x的最小正整数值,$mod \ P$即可:$x ≡ a_1 M_1 M_1^{-1} + a_2 M_2 M_2^{-1} + ... + a_r M_r M_r^{-1}\ ( \ mod \ P)$

代码实现

/*By DennyQi*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
#define r read()
using namespace std;
inline int read(){
int x = ; int w = ; register int c = getchar();
while(c ^ '-' && (c < '' || c > '')) c = getchar();
if(c == '-') w = -, c = getchar();
while(c >= '' && c <= '') x = (x << ) + (x << ) + c - '', c = getchar(); return x * w;
}
int K,P=,x,y;
int a[],b[];
void exgcd(int M, int B){
if(!B){
x = , y = ;
return;
}
exgcd(B, M%B);
int tmp = x;
x = y;
y = tmp - (M / B) * y;
}
int GetInv(int M, int B){
exgcd(M, B);
return (x + B) % B;
}
inline void CRT(){
int M,inv,ans=;
for(int i = ; i <= K; ++i){
M = P / b[i];
inv = GetInv(M, b[i]);
ans = (ans + a[i]*M*inv) % P;
}
printf("%d", ans);
}
int main(){
K = r;
for(int i = ; i <= K; ++i) a[i] = r;
for(int i = ; i <= K; ++i) b[i] = r, P *= b[i];
CRT();
return ;
}

「中国剩余定理CRT」学习笔记的更多相关文章

  1. 【Java】「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势

    0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有 ...

  2. 中国剩余定理CRT(孙子定理)

    中国剩余定理 给出以下的一元线性同余方程组: $\Large(s):\left\{\begin{aligned}x\equiv a_1\ (mod\ m_1)\\x\equiv a_2\ (mod\ ...

  3. 【Java】「深入理解Java虚拟机」学习笔记(5)- 类加载

    C/C++在编译时需要进行连接,而Java的类加载.连接和初始化是在运行时完成的. 图  类的生命周期 图中解析的过程不一定在准备和初始化之间,也可以在初始化之后再开始,以支持Java的运行时动态绑定 ...

  4. 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

    我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...

  5. 【Java】「深入理解Java虚拟机」学习笔记(2)- JVM内存区域

    一.运行时数据区 JVM在执行Java程序的时候,将其运行时数据区划分为若干不同区域.它们的用途和创建及销毁的时间不同. 1.程序计数器(Program Counter Register) 是一块很小 ...

  6. 【bzoj3782】上学路线 dp+容斥原理+Lucas定理+中国剩余定理

    题目描述 小C所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M).小C家住在西南角,学校在东北角.现在有T个路口进行施工,小C不能通过这些路口.小C喜欢走最短的路径到达目的 ...

  7. 「ExLucas」学习笔记

    「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% m ...

  8. gcd,扩展欧几里得,中国剩余定理

    1.gcd: int gcd(int a,int b){ ?a:gcd(b,a%b); } 2.中国剩余定理: 题目:学生A依次给n个整数a[],学生B相应给n个正整数m[]且两两互素,老师提出问题: ...

  9. NOI 2018 屠龙勇士 (拓展中国剩余定理excrt+拓展欧几里得exgcd)

    题目大意:略 真是一波三折的一道国赛题,先学了中国剩余定理,勉强看懂了模板然后写的这道题 把取出的宝剑攻击力设为T,可得Ti*x=ai(mod pi),这显然是ax=c(mod b)的形式 这部分用e ...

随机推荐

  1. Unity3D中Isometric Tilemap功能实践

    前言 最近出于兴趣想自己做一个2D的游戏,因为有着C#的基础,所以决定使用Unity3D来做. 之前对于Unity3D其实了解不多,不过看了一些Unity3D的视频和官方文档后,暂时做起来也没遇到什么 ...

  2. React组件重构:嵌套+继承 与 高阶组件

    前言 在最近做的一个react项目中,遇到了一个比较典型的需要重构的场景:提取两个组件中共同的部分. 最开始通过使用嵌套组件和继承的方式完成了这次重构. 但是后来又用高阶组件重新写了一遍,发现更好一点 ...

  3. 追源索骥:透过源码看懂Flink核心框架的执行流程

    li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...

  4. H5 17-兄弟选择器

    17-兄弟选择器 我是标题 我是超链接 我是段落 我是段落 我是段落 我是标题 我是段落 我是段落 我是段落 --> 我是标题 我是超链接 我是段落 我是段落 我是超链接 我是段落 我是标题 我 ...

  5. vue入门(一)

    通过JS引用vue就不说了,重点说一下使用npm搭建vue脚手架. (以下是windows系统下的操作,win7+) npm是个命令行工具,在搭建vue脚手架之前首先要安装nodeJS,下面是node ...

  6. Django 中的 cookie 和 session

    一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...

  7. redis的应用场景 为什么用redis

    一.不是万能的菲关系系数据库redis 在面试的时候,常被问比较下Redis与Memcache的优缺点,个人觉得这二者并不适合一起比较,redis:是非关系型数据库不仅可以做缓存还能干其它事情,Mem ...

  8. UIAutomatorViewer 出现错误:Unable to connect to adb

    最近升级了AndroidSDK,打开UIAutomatorViewer.bat,结果发现获取不了Android设备界面上的UI信息.经过一番努力,终于把这个问题解决了,详细过程如下: 1. Unabl ...

  9. [options] 未与 -source 1.6 一起设置引导类路径

    用ant与eclipse编译Cassandra 1.2.19,出现了“ [options] 未与 -source1.6一起设置引导类路径”的警告,并出现了一些编译错误,提示编译失败,上网找了很 多资料 ...

  10. Satis搭建composer私有库(自定义下载目录)

    在我们的日常php开发中需要使用大量的第三方包和类库, 怎么管理是一个问题, 我们用的Yii2框架, 但是并没有把composer用起来, 由于最近更换为docker部署项目, 于是想起来用compo ...