中国剩余定理

以前公式用的是图片导致排版丑陋,今天复习顺便重写了

描述

有同余方程组:
\[ \left\{ \begin{matrix} x \equiv a_1 (mod \ m_1) \\ x \equiv a_2 (mod \ m_2) \\ ... \\ x \equiv a_k (mod \ m_k) \end{matrix} \right. \\ 其中m_i两两互质 \]
令\(M = \prod_{i = 1}^{k} m_i\),则方程组的一个解为\(x = \sum_{i = 1}^{k} a_i \cdot \frac{M}{m_i} \cdot (\frac{M}{m_i})^{-1}\),其中\((\frac{M}{m_i})^{-1}\)表示\(\frac{M}{m_i}\)模\(m_i\)意义下的逆元

如果求最小非负整数解,再模\(M\)即可

证明

对于每一个\(x \equiv a_i (mod \ m_i)\),记解为\(x_i\),则有\(x_i + m_i \cdot y = a_i\),两边除以\(a_i\),得:
\[ \frac{x_i}{a_i} + \frac{m_i \cdot y}{a_i} = 1 \tag{1} \]
由\(m_i\)两两互质得\(\frac{M}{m_i}\)与\(m_i\)互质,所以存在\(p, q \in Z^+\),使得:
\[ p \cdot \frac{M}{m_i} + q \cdot m_i = 1 \tag{2} \]
即:
\[ p \cdot \frac{M}{m_i} \equiv 1 (mod \ m_i) \\ p \equiv (\frac{M}{m_i})^{-1} (mod \ m_i) \tag{3} \]
由\((1)(2)(3)\)易得\(x_i = a_i \cdot p \cdot \frac{M}{m_i} = a_i \cdot \frac{M}{m_i} \cdot (\frac{M}{m_i})^{-1}\)是方程的一个解

对于\(j \neq i\),有\(m_j | \frac{M}{m_i}\),所以\(x_i \equiv 0 (mod \ m_j)\),所以\(\sum_{i = 1}^{k} a_i \cdot \frac{M}{m_i} \cdot (\frac{M}{m_i}) ^ {-1} \equiv a_j (mod \ m_j)\)

故方程组的一个解是\(x = \sum_{i = 1}^{k} a_i \cdot \frac{M}{m_i} \cdot (\frac{M}{m_i}) ^ {-1}\),显然\(x \% M\)是最小非负整数解

一个应用

有的时候题目要求答案模一个大合数,可以把合数拆成\(\prod p_{i}^{k_i}\)的形式,化成由\(ans \equiv a_i (mod \ p_{i}^{k_i})\)组成的方程组然后求解

代码

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;typedef long long LL;
LL a[1005], m[1005], M = 1, ans;
int n;void ExGCD(LL a, LL b, LL &d, LL &x, LL &y)
{if(!b) d = a, x = 1, y = 0;else{ExGCD(b, a % b, d, y, x);y -= a / b * x;}
}
LL Inverse(LL a, LL p)
{LL x, y, d;ExGCD(a, p, d, x, y);x = (x % p + p) % p;return x;
}
int main()
{scanf("%d", &n);for(int i = 0; i < n; i++)scanf("%lld", a + i);for(int i = 0; i < n; i++){scanf("%lld", m + i);M *= m[i];}for(int i = 0; i < n; i++)ans = (ans + M / m[i] * Inverse(M / m[i], m[i]) % M * a[i] % M) % M;ans = (ans + M) % M;printf("%lld\n", ans);return 0;
}//Rhein_E

转载于:https://www.cnblogs.com/Rhein-E/p/10637099.html

[学习笔记]中国剩余定理相关推荐

  1. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

  2. python中国剩余定理公式_《孙子算经》之物不知数题:中国剩余定理

    1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数.  如果 m ...

  3. 中国剩余定理matlab程序,中国剩余定理即孙子定理的五种解法

    中国剩余定理即孙子定理的五种解法 -- 学习初等数论心得笔记 2013-10-04 博文2015-12修改 "中国剩余定理"是公元5-6世纪.我国南北朝时期的一部著名算术著作< ...

  4. 基于Miracl库的中国剩余定理C语言实现

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/tch3430493902/articl ...

  5. 密码学基础算法(二)中国剩余定理

    随便谷歌了一个图片做首图 原图地址: http://www.siwapu.com/etagid41968b0/ 密码学基础系列: (一) 基于整数的欧几里得算法和扩展欧几里得算法 (二) 中国剩余定理 ...

  6. 扩展欧几里得算法、乘法逆元与中国剩余定理

    文章目录 前言 定义.定理和部分证明 整除 定义 定理 定理的证明 同余 定义 同余的性质 同余的运算律 运算律的证明 扩展欧几里得算法 代码模板 算法详解 乘法逆元 求解逆元 乘法逆元的作用 中国剩 ...

  7. 孙子定理 中国剩余定理

    孙子定理 摘自:百度百科 目录 定义 解释 解法 数学公式 中国剩余定理 案例 展开 编辑本段 定义 中国古代求解一次同余式组(见同余)的方法.是数论中一个重要定理.又称中国剩余定理. 内容 编辑本段 ...

  8. 挑战程序竞赛系列(41):4.1中国剩余定理

    挑战程序竞赛系列(41):4.1中国剩余定理 详细代码可以fork下Github上leetcode项目,不定期更新. 练习题如下: POJ 1006: Biorhythms POJ 2891: Str ...

  9. CF338D GCD Table(拓展中国剩余定理,细节处理,2900分)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 CF338D GCD Table(拓展中国剩余定理,细节处理,2900分) Problem 有一张 n ...

  10. 初等数论--同余方程--同余方程组:中国剩余定理

    初等数论--同余方程--同余方程组:中国剩余定理 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列:初等数论 ...

最新文章

  1. 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划
  2. cocos2d-x3.0rc打包apk遇到的一些问题记录
  3. 数学建模中的excel操作
  4. c/c++格式化字符串的标识
  5. Flume学习笔记(一)安装与简单使用
  6. 操作系统原理之内存管理(第四章第一部分)
  7. 使用搜索栏过滤collectionView(按照首字母)
  8. 《Reids 设计与实现》第七章 RDB 持久化
  9. Photopile JS – 帮助你实现精致的照片堆叠效果
  10. selenium报错 : WebDriverException: ‘chromedriver‘ executable needs to be in PATH解决方案
  11. 毕业论文:基于响应式页面的新闻资讯类门户网站的设计与实现
  12. 微服务的数据聚合Join
  13. 应用实践 | Apache Doris 在网易互娱的应用实践
  14. django搭建个人博客(一)
  15. 如何将ES6转换成ES5?
  16. jQuery 效果 - 淡入淡出
  17. 字重font-weight--没有UI的前端er
  18. 基于SpringBoot的运维监控系统
  19. 发几个mac高清壁纸,想要的拿去!
  20. Latex 2.1 文字与符号

热门文章

  1. CodeForces 255C. Almost Arithmetical Progression (DP)
  2. Begin using git (Part1) - Git的安装与配置
  3. iPhone官方资料链接
  4. ⭐图例结合超硬核讲解shiro⭐
  5. protoc 生成C++代码
  6. MySQL 常用函数大全
  7. Servlet--ListenerFilter
  8. linux中lsattr命令,Linux命令(16)——chattr与lsattr命令
  9. buffer sort Oracle,SQL执行计划中的BUFFER SORT是什么意思呢,请高手指点.
  10. html5标签对js影响,浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预