中国剩余定理讲解及例题

news2024/9/30 19:42:04

凡有所学,皆成性格。
凡有所学,皆成性格。

🍉中国剩余定理

维基百科

🌽中国剩余定理,又称孙子定理或中国余数定理,是数论中的一个关于一元线性同余方程组的定理,说明了一元线性同余方程组有解的准则以及求解方法。


🍒形式描述:

在这里插入图片描述
一个整数除以三余二,除以五余三,除以七余二,求这个整数(x)。
≡ 就是全等于的意思   x m o   m 1 = = a 1   m o d   m 1 \equiv就是全等于的意思\,xmo\,m1==a1 \,mod\,m1 就是全等于的意思xmom1==a1modm1
所求整数x和余数a就是同余的他们的余数都为a;

🍐 解法

2023-07-21 2023-07-23 2023-07-25 2023-07-27 2023-07-29 2023-07-31 2023-08-01 2023-08-03 已完成 进行中 解法一 解法二 中国剩余定理 解法

一阶线性同余方程组


S : = { a   m o d   d = e a   m o d   b = c a   m o d   f = g S:= \begin{cases}a\,mod\,d=e \\a\,mod\, b=c \\a\,mod\,f=g \end{cases} S:= amodd=eamodb=camodf=g
类似这样求a的问题:一个整数除以三余二,除以五余三,除以七余二,求这个整数

🍓求解方法:

⭐️1.O(1)“大衍求一术”

mi除数,M除数相乘除了自己

1 ) M i = M / m i , ∀   i ∈ { 1 , 2 , 3 , 4 , 5... , n } 是除了 m i 以外 n − 1 个数的乘积 1)Mi=M/mi,\forall\,i\in\lbrace1,2,3,4,5...,n\rbrace是除了mi以外n-1个数的乘积 1Mi=M/mi,i{1,2,3,4,5...,n}是除了mi以外n1个数的乘积

2 )计算出相应的数论倒数: t i = M i   m o d   m i ( 逆元) 2)计算出相应的数论倒数:ti=Mi\,mod\,mi(逆元) 2)计算出相应的数论倒数:ti=Mimodmi(逆元)

3 ) M i 与对应的 t i 相乘 3)Mi与对应的ti相乘 3Mi与对应的ti相乘

4 )得到的结果与对应的余数相乘,结果相加为 a 4)得到的结果与对应的余数相乘,结果相加为a 4)得到的结果与对应的余数相乘,结果相加为a

5 )解的形式: x = a + k ∗ M , k ∈   Z 5)解的形式:x=a+k*M,k\in\,Z 5)解的形式:x=a+kM,kZ

⭐️ 2.枚举O(n)

枚举结果得出答案(笨办法):
比如一个整数除以三余二,除以五余三,除以七余二
就可以写成xmod2=3,xmod5=3,xmod7=2;
我们不知道的是x到底是2,5,7的几倍,因为都有余数。
所以设x是2,5,7的a,b,c倍
枚举a,b,c取得交集即为x

⭐️3.逐级满足法

先求出符合第一个式子得解,再向第二个式子和并一直到最后一个式子。

⭐️4.化为相同除数法

S : = { x   m o d   2 = 7 x   m o d   5 = 9 x   m o d   1 = 5 S:= \begin{cases}x\,mod\,2=7 \\x\,mod\, 5=9 \\x\,mod\,1=5 \end{cases} S:= xmod2=7xmod5=9xmod1=5

这三个同余式,除数不同,分别为7、9、5,为了能利用同余式的和差特性,简化计算,先设法使它们的除数相同,为此:

X≡2 (mod 7 )两边都乘9x5,得Xx45≡2x45 (mod 7x45 ) →45 X≡90 (mod 315 ) …(1)

X≡5 (mod 9 ) 两边都乘7x5,得Xx35≡5x35 (mod 9x35 ) →35 X≡175 (mod 315 ) …(2)

X≡1 (mod 5 ) 两边都乘7x9,得Xx63≡1x63 (mod 9x63 ) →63 X≡ 63 (mod 315 ) …(3)

​ (1)+(2)+(3)= (4) → 143 X≡328 (mod 315 ) …4)

根据同余式的加减性质,(1)+(2)+(3)得:

143 X≡328 (mod 315 ) 即 143 X≡13 (mod 315 ),化为带余除式为:

143 X÷315=K …13 亦即 143X-13=315 K ,有(143X-13)÷315=K(整数)

(143X-13)÷315=K(整数)用通式表示为 (AX-B)÷S=K

解得 X=86、K=38 (实际上不用它,在此仅确认它是整数就行了),

通解为 X=86+315 N ( N= 1、2、3 … )

或 X≡86 (mod 315 )

🎯参考例题

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

问题描述

自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干些事业,于是派他到中原养猪场养猪,可是曹冲满不高兴,于是在工作中马马虎虎,有一次曹操想知道母猪的数量,于是曹冲想狠狠耍曹操一把。举个例子,假如有
16 头母猪,如果建了 3个猪圈,剩下 1头猪就没有地方安家了。如果建造了 5 个猪圈,但是仍然有 1 头猪没有地方去,然后如果建造了 7 个猪圈,还有 2 头没有地方去。你作为曹总的私人秘书理所当然要将准确的猪数报给曹总,你该怎么办?


格式输入

第一行包含一个整数 n —— 建立猪圈的次数,接下来 n 行,每行两个整数 ai
,bi ,表示建立了 ai个猪圈,有 bi头猪没有去处。你可以假定 a1∼a n互质。


格式输出
输出包含一个正整数,即为曹冲至少养母猪的数目。


样例输入
3
3 1
5 1
7 2


样例输出
16


评测用例规模与约定
1≤n≤10,0≤bi <ai ≤100000,1≤∏a i≤10^18


解析

就是中国剩余定理和拓展gcd的一个联合运用,洛谷有更详细的解释。


参考程序

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
void exgcd(int a,int b,int &x,int &y)
{
    if(b==0){x=1,y=0;return;}
    else{
        exgcd(b,a%b,x,y);
        int t=x-a/b*y;
        x=y,y=t;
    }
}
int crt(vector<int>a,vector<int> m,int n)
{
    int M=1,r=0;
    for(int i=0;i<n;i++)M*=m[i];
    for(int i=0,Mi,x,y;i<n;i++)
    {
        Mi=M/m[i];
        exgcd(Mi,m[i],x,y);
        r=(r+a[i]*Mi*x)%M;
    }
    if(r<0)r+=M;
    return r;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    ll n;cin>>n;
    vector<int>c,d;
    for(int i=0;i<n;i++){
       ll a,b;cin>>a>>b;c.push_back(a);
       d.push_back(b);
    }
  int rr=crt(d,c,n);
  cout<<rr;
}

参考文章:
中国剩余定理
中国剩余定理得五种解法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/788785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集成学习——Bagging算法和随机森林算法

1、集成学习 集成学习是将多个机器学习的算法结合起来的一种方法&#xff0c;即实现将多个弱学习器通过组成一个整体来实现强学习的效果&#xff0c;俗语里&#xff1a;三个臭皮匠赛过一个诸葛亮。 2、Bagging算法 2.1 Bootstrap自助采样 在样本集D(样本数为m)中进行有放回…

51单片机--LCD1602

LCD1602的介绍 LCD1602是一种字符型液晶显示模块&#xff0c;通常用于嵌入式系统、单片机等领域。它由LCD&#xff08;液晶显示屏&#xff09;、HD44780控制驱动主电路及其扩展驱动电路、少量电阻、电容元件等组成。 LCD1602具有以下特点和功能&#xff1a; 显示能力&#xf…

使用sftp

一、背景 新项目组前端部署方式是Build打包生成dist文件&#xff0c;交由后端部署。后来知道了vscode安装sftp前端可以自行部署。 二、实操 1、vscode安装sftp 2、 配置 ①F1 / ctrlshiftp ②命令行输入sftp -> 选择 sftp: Config ③配置信息介绍 {"name"…

liteflow overall笔记

偶然看到liteflow的介绍&#xff0c;感觉是一个local单机版本的conductor。 核心代码的注释非常好&#xff0c;在我看过的开源代码里面数一数二单元测试完备&#xff0c;要学习用法基本都可以在单元测试看到相关代码核心基于阿里的ElExpress&#xff0c;使用方式值得学习监控稍…

网络编程八股文

文章目录 tcp粘包问题&#xff1f;BIO,NIO,AIO是什么&#xff1f;零拷贝是什么&#xff1f;浏览器发出一个请求到收到响应的具体步骤&#xff1f;select, poll, epoll区别是什么&#xff1f;https是如何保证安全传输的&#xff1f;tcp的三次握手和四次挥手&#xff1a;tcp网络分…

LZ77算法理论

发布时间&#xff1a;2023-07-25 14:58:28 英文介绍文档&#xff1a;https://archive.ph/F4pg7 很短&#xff0c;看一遍10&#xff5e;20分钟应该够了。 1. 算法用到的术语&#xff1a; Input stream 要被压缩的字符序列 Character 输入流中的基本数据元素 Coding position…

RealsenseD455 + ubuntu18.04 + ROS-Melodic的使用

系统&#xff1a;Ubuntu18.04 ros: melodic 相机&#xff1a;intel RealSense D455一、安装依赖和 Realsense SDK sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver…

机器人导航(3):导航相关消息

文章目录 地图nav_msgs/MapMetaDatanav_msgs/OccupancyGrid 里程计坐标变换定位目标点与路径规划激光雷达相机深度图像转激光数据depthimage_to_laserscan简介depthimage_to_laserscan节点说明depthimage_to_laserscan使用 地图 地图相关的消息主要有两个: nav_msgs/MapMetaD…

【雕爷学编程】Arduino动手做(171)---micro:bit 开发板

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#xff0c;这…

“VCMessage”任务意外失败

从网上查到很多都是说设置这个位置&#xff0c;但是我的已经是对的&#xff0c;还是出现 “VCMessage”任务意外失败这个错误。 又查到一个人说解决方法是更正OutputPath或从父级继承&#xff1a;右键单击项目,然后转到"属性">"链接器">"常规&q…

开源项目注意事项

fork项目后&#xff0c;记得另外开启一个分支然后在新分支上进行开发&#xff0c;push到仓库后从分支往原项目提交。 否则会出现Partially verified&#xff08;导致提交pr后auto-merge失败&#xff09; 注意git提交操作 https://blog.csdn.net/sonichenn/article/details/13…

matplotlib从起点出发(3)_Tutorial_3_Image

1 图像教程 matplotlib可以简单地处理并显示图像&#xff0c;当然&#xff0c;它不是一个专业的图像处理库&#xff0c;所以也不要拿它来与opencv进行比较。 2 启动命令 首先&#xff0c;让我们启动IPython。它是对标准python提示符的最出色的增强&#xff0c;它与matplotli…

OpenHarmony与HarmonyOS联系与区别

目录 1. 背景 2.OpenHarmony 3.HarmonyOS 4.鸿蒙生态 5.OpenHarmony与HarmonyOS的技术上实现区别 1.语言支持 2.SDK 的不同 3.运行调测方式不同 4.对APK的兼容性不同 5.包含关系 6.调试命令 6.何时选择OpenHarmony或是HarmonyOS&#xff1f; 1. 背景 开篇就说“关于…

企业数字化转型中容易出现哪些误区?

对信息化和数字化的投入产出认识有误 在和一些从事企业信息化数字化建设的朋友的沟通中&#xff0c;发现很多企业老板对信息化和数字化投入产出认知上确实有偏差&#xff0c;他们总觉得投入一部分&#xff0c;就得有相应的产出&#xff0c;在他们心里信息化的投入产出如下图曲线…

强化学习SAC算法对数概率公式推导

强化学习 SAC算法 对数概率推导 先上原论文&#xff1a; 首先对公式 ( 20 ) (20) (20) 做推导。 公式 ( 20 ) (20) (20) 的数据流应该是这样的&#xff1a; s → π ( u ∣ s ) → u → a tanh ⁡ ( u ) → a \mathbf{s}\rightarrow \pi(\mathbf{u}|\mathbf{s}) \rightar…

Vue3标签(Tag)

APIs 参数说明类型默认值必传closable标签是否可以关闭booleanfalsefalsecolor标签颜色&#xff0c;预置多种常用颜色&#xff1a;success, processing, error, warn, pink, red, orange, green, cyan, blue, purplestring‘’falseicon设置图标string | slot‘’false Event…

【深度学习】【Image Inpainting】Generative Image Inpainting with Contextual Attention

Generative Image Inpainting with Contextual Attention DeepFillv1 (CVPR’2018) 论文&#xff1a;https://arxiv.org/abs/1801.07892 论文代码&#xff1a;https://github.com/JiahuiYu/generative_inpainting 论文摘录 文章目录 效果一览摘要介绍论文贡献相关工作Image…

MySQL数据备份与恢复练习

目录 1.创建student和score表 2.为student表和score表增加记录 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式&#xff0c;能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将MySQL数据库压缩备份 6.备份MySQL数据库某个(些)表。此例备…

『Python学习笔记』Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号

Python代码打包成pip包(可pip install)|查看安装torch、cuda和cudnn版本号 文章目录 一. pip包的好处二. 简单小例子2.1. 创建Python包2.2. 构建Python包2.3. 上传到PyPI2.4. pip安装测试 三. CLIP多模态模型相关例子3.1. Chinese-CLIP例子3.2. CLIP-ONNX例子3.3. 问题1和问题…

vue使用driver.js完成页面引导的功能

需求&#xff1a;用户首次进入的时候肯定不知道一些功能是干什么在哪里&#xff0c;之后给用户一个页面引导&#xff0c;教他怎么做。 点击插件driver.js官方文档 效果&#xff1a; 1.下载driverjs 我默认下载的是最新版 "driver.js": "^1.0.5",&#x…