中国剩余定理

中国剩余定理

一、问题的引入

  • 一个整数除以3余2、除以5余3、除以7余2,求这个整数?答案:23

  • 所谓中国剩余定理基本思想:知道一个整数对于几个不同的模数的余数,那么可以推断出该整数对于这些模数的最小非负整数解。

二、拓展欧几里得求逆元

逆元定义:如果一个线性同余方程 a x ≡ 1 ( m o d b ) ax \equiv 1 \ (mod\ b) ax1 (mod b)则称 x 为 a m o d b a\ mod \ b a mod b 的逆元,记作 a − 1 a^{-1} a1

拓展欧几里得算法核心方程 a x + b y = d = g c d ( a , b ) ax + by = d = gcd(a,b) ax+by=d=gcd(a,b)
根据逆元等式: a x ≡ 1 ( m o d b ) [ 此时 a 、 b 为已知量 , x 为 a 的逆元 a − 1 ] 转化   a x ≡ 1 ( m o d b ) ⟹ 【 a x = n b + 1 】 ⟹ 【 a x + n ′ b = 1 】 ( n = − n ′ ) \begin{align*} & 根据逆元等式:ax\equiv 1(\ mod\ \ b)\ [此时a、b为已知量,x为a的逆元a^{-1}]\\ & 转化\ \ ax\equiv 1(\ mod\ \ b)\ \Longrightarrow 【ax = nb + 1】\Longrightarrow【ax + n'b = 1】(n = -n') & \end{align*} 根据逆元等式:ax1( mod  b) [此时ab为已知量,xa的逆元a1]转化  ax1( mod  b) ax=nb+1ax+nb=1(n=n)
将上述逆元的定义方程进行转化后我们来对比转化方程拓展欧几里得核心方程
( 1 ) a x + b n = 1 【逆元转化方程】 ( 2 ) a x + b y = g c d ( a , b ) 【拓展欧几里得核心方程】 \begin{align*} & (1){\color{red}a}x + {\color{red}b}n = 1 【逆元转化方程】\\ & (2){\color{red}a}x + {\color{red}b}y = gcd(a,b) 【拓展欧几里得核心方程】\\ \end{align*} (1)ax+bn=1【逆元转化方程】(2)ax+by=gcd(a,b)【拓展欧几里得核心方程】
可以看到上述两方程的格式不能说相似,只能说一模一样。只需要使用拓展欧几里得算法对互质的两个数求出一组解 ( x , y ) (x,y) (x,y)

就可以获得逆元了。

三、中国剩余定理的原理

我们继续考虑上述问题
求整数 X 除以 3 余 2 、除以 5 余 3 、除以 7 余 2 。转化为下述公式 : X % 3 = 2 X % 5 = 3 X % 7 = 2 求整数X除以3余2、除以5余3、除以7余2。转化为下述公式: \\ X\ \ \% \ \ 3\ =\ 2\\ X\ \ \% \ \ 5\ =\ 3\\ X\ \ \% \ \ 7\ =\ 2\\ 求整数X除以32、除以53、除以72。转化为下述公式:X  %  3 = 2X  %  5 = 3X  %  7 = 2
如果可以找到三个整数 X 1 、 X 2 、 X 3 X_1、X_2、X_3 X1X2X3 并且满足下述的算式
{ X 1 % 3 = 2 X 1 % 5 = 0 X 1 % 7 = 0 { X 2 % 3 = 0 X 2 % 5 = 3 X 2 % 7 = 0 { X 3 % 3 = 0 X 3 % 5 = 0 X 3 % 7 = 2 \left\{ \begin{array}{lr} X_1\ \% \ 3 = 2 \\ X_1\ \% \ 5 = 0 \\ X_1\ \% \ 7 = 0 \\ \end{array} \right. \qquad \qquad \left\{ \begin{array}{lr} X_2\ \% \ 3 = 0 \\ X_2\ \% \ 5 = 3 \\ X_2\ \% \ 7 = 0 \\ \end{array} \right. \qquad \qquad \left\{ \begin{array}{lr} X_3\ \% \ 3 = 0 \\ X_3\ \% \ 5 = 0 \\ X_3\ \% \ 7 = 2 \\ \end{array} \right. X1 % 3=2X1 % 5=0X1 % 7=0 X2 % 3=0X2 % 5=3X2 % 7=0 X3 % 3=0X3 % 5=0X3 % 7=2
那么 X X X 可以由这三个整数 X 1 、 X 2 、 X 3 X_1、X_2、X_3 X1X2X3 构成
X = X 1 + X 2 + X 3 X = X_1 + X_2 + X_3 X=X1+X2+X3
继续将上述的 X 1 、 X 2 、 X 3 X_1、X_2、X_3 X1X2X3 分解为子问题
{ Y 1 % 3 = 1 Y 1 % 5 = 0 Y 1 % 7 = 0 { Y 2 % 3 = 0 Y 2 % 5 = 1 Y 2 % 7 = 0 { Y 3 % 3 = 0 Y 3 % 5 = 0 Y 3 % 7 = 1 \left\{ \begin{array}{lr} Y_1\ \% \ 3 = 1 \\ Y_1\ \% \ 5 = 0 \\ Y_1\ \% \ 7 = 0 \\ \end{array} \right. \qquad \qquad \left\{ \begin{array}{lr} Y_2\ \% \ 3 = 0 \\ Y_2\ \% \ 5 = 1 \\ Y_2\ \% \ 7 = 0 \\ \end{array} \right. \qquad \qquad \left\{ \begin{array}{lr} Y_3\ \% \ 3 = 0 \\ Y_3\ \% \ 5 = 0 \\ Y_3\ \% \ 7 = 1 \\ \end{array} \right. Y1 % 3=1Y1 % 5=0Y1 % 7=0 Y2 % 3=0Y2 % 5=1Y2 % 7=0 Y3 % 3=0Y3 % 5=0Y3 % 7=1
于是 X 1 、 X 2 、 X 3 X_1、X_2、X_3 X1X2X3 就可以由对应的Y构成
X 1 = 2 Y 1 X 2 = 3 Y 2 X 3 = 2 Y 3 X_1\ =\ 2\ Y_1\\ X_2\ =\ 3\ Y_2\\ X_3\ =\ 2\ Y_3\\ X1 = 2 Y1X2 = 3 Y2X3 = 2 Y3
所以根据上述的分解,我们最后得到了
X = 2 Y 1 + 3 Y 2 + 2 Y 3 \ X \ = \ 2\ Y_1 + 3\ Y_2 + 2\ Y_3  X = 2 Y1+3 Y2+2 Y3
我们以其中一个子问题为例求解
Y 1 % 3 = 1 Y 1 % 5 = 0 Y 1 % 7 = 0 Y_1\ \% \ 3 = 1 \\ Y_1\ \% \ 5 = 0 \\ Y_1\ \% \ 7 = 0 \\ Y1 % 3=1Y1 % 5=0Y1 % 7=0
根据上述等式不难知道 Y 1 Y_1 Y1 一定是 5 × 7 = 35 5 \times 7 = 35 5×7=35 的倍数于是我们令 Y 1 = 35 k Y_1 = 35 k Y1=35k

那么就有 35 k ≡ 1 ( m o d 3 ) 35k \equiv 1 \pmod{3} 35k1(mod3)这时 k k k 就是 5 × 7 5 \times 7 5×7 模 3 的逆元,记 k = [ 3 5 − 1 ] 3 k = [35^{-1}]_3 k=[351]3 那么 Y 1 = 5 × 7 × [ 3 5 − 1 ] 3 Y_1 = 5 \times 7\times [35^{-1}]_3 Y1=5×7×[351]3

因此将所有子问题求解得下述等式
{ Y 1 = 5 × 7 × [ ( 5 × 7 ) − 1 ] 3 并且 [ ( 5 × 7 ) − 1 ] 3 = 2 Y 2 = 3 × 7 × [ ( 3 × 7 ) − 1 ] 5 并且 [ ( 3 × 7 ) − 1 ] 5 = 1 Y 3 = 3 × 5 × [ ( 3 × 5 ) − 1 ] 7 并且 [ ( 3 × 5 ) − 1 ] 7 = 1 \left\{ \begin{array}{lr} Y_1 = 5 \times 7\times [(5\times7)^{-1}]_3\qquad 并且[(5\times7)^{-1}]_3 = 2\\ Y_2 = 3 \times 7\times [(3\times7)^{-1}]_5\qquad 并且[(3\times7)^{-1}]_5 = 1\\ Y_3 = 3 \times 5\times [(3\times5)^{-1}]_7\qquad 并且[(3\times5)^{-1}]_7 = 1\\ \end{array} \right. Y1=5×7×[(5×7)1]3并且[(5×7)1]3=2Y2=3×7×[(3×7)1]5并且[(3×7)1]5=1Y3=3×5×[(3×5)1]7并且[(3×5)1]7=1
由此可以得到最终式子还要mod ( 3 × 5 × 7 ) (3\times5\times7) (3×5×7)因为要求最小整数
X = 2 × ( 5 × 7 × [ ( 5 × 7 ) − 1 ] 3 ) + 3 × ( 3 × 7 × [ ( 3 × 7 ) − 1 ] 5 ) + 2 × ( 3 × 5 × [ ( 3 × 5 ) − 1 ] 7 ) ( m o d 3 × 5 × 7 ) X = 2\times (5 \times 7\times [(5\times7)^{-1}]_3) + 3\times(3 \times 7\times [(3\times7)^{-1}]_5) + 2\times(3 \times 5\times [(3\times5)^{-1}]_7) \pmod{3\times5\times7}\\ X=2×(5×7×[(5×7)1]3)+3×(3×7×[(3×7)1]5)+2×(3×5×[(3×5)1]7)(mod3×5×7)
逆元怎么求?看上述第二节的内容
[ ( 5 × 7 ) − 1 ] 3 = 2 [ ( 3 × 7 ) − 1 ] 5 = 1 [ ( 3 × 5 ) − 1 ] 7 = 1 [(5\times7)^{-1}]_3 = 2\\ [(3\times7)^{-1}]_5 = 1\\ [(3\times5)^{-1}]_7 = 1\\ [(5×7)1]3=2[(3×7)1]5=1[(3×5)1]7=1
所以 X = ( 2 × 5 × 7 × 2 ) + ( 3 × 3 × 7 × 1 ) + ( 2 × 3 × 5 × 1 ) ( m o d 105 ) = ( 140 + 63 + 30 ) ( m o d 105 ) = 23 \color{blue}X = (2 \times 5 \times 7 \times 2) + (3\times3\times7\times1) + (2\times3\times5\times1) \pmod{105} = (140+63+30)\pmod{105} = 23 X=(2×5×7×2)+(3×3×7×1)+(2×3×5×1)(mod105)=(140+63+30)(mod105)=23

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

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

相关文章

ChatGPT在指尖跳舞: open-interpreter实现本地数据采集、处理一条龙

原文:ChatGPT在指尖跳舞: open-interpreter实现本地数据采集、处理一条龙 - 知乎 目录 收起 Part1 前言 Part2 Open - Interpreter 简介 Part3 安装与运行 Part4 工作场景 1获取网页内容 2 pdf 文件批量转换 3 excel 文件合并 Part5总结 参考资料 往期推…

算法基础十四

二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root …

2023第十四届蓝桥杯国赛 C/C++ 大学 B 组

文章目录 前言试题 A: 子 2023作者思考题解答案 试题 B: 双子数作者思考题解 试题 C: 班级活动作者思考题解 试题 D: 合并数列作者思考题解 试题 E: 数三角作者思考题解 试题 F: 删边问题作者思考题解 试题 G: AB 路线作者思考题解 试题 H: 抓娃娃作者思考题解 试题 I: 拼数字试…

Android 14 应用适配指南

Android 14 应用适配指南:https://dev.mi.com/distribute/doc/details?pId1718 Android 14 功能和变更列表 | Android 开发者 | Android Developers 1.获取Android 14 1.1 谷歌发布时间表 https://developer.android.com/about/versions/14/overview#timeli…

事务--04---分布式系统唯一ID

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 分布式ID一、什么是分布式系统唯一ID2. 二、分布式系统唯一ID的特点 分布式ID-----实现方案1、使用UUID生成分布式ID2、基于数据库自增ID3、Redis生成ID4、号段模式…

【嵌入式开发 Linux 常用命令系列 14.1 -- .bashrc 定义函数】

上篇文章:【嵌入式开发 Linux 常用命令系列 14 – source hello.sh 和 ./hello.sh 的区别】 文章目录 .bashrc 定义函数 .bashrc 定义函数 在 .bashrc 文件中定义别名时,通常不能直接传递参数。别名是用于创建命令的简写形式,它们不支持参数…

人工智能联盟的首件神兵利器——“Purple Llama” 项目,旨为保护工智能模型安全性

Meta公司(Meta Platform Inc),原名Facebook,创立于2004年2月4日,市值5321.71亿美元。总部位于美国加利福尼亚州门洛帕克。 Meta 公司推出了名为“Purple Llama”的项目,旨在保护和加固其开源人工智能模型。…

WINCC8.0脚本调试方法

前言 WINCC是西门子推出的过程可视化系统(SCADA),是基于PC的HMI系统,兼容WINDOWS各种系统,除了强大的图形系统之外,WINCC还具有在线历史趋势、报警记录、用户管理、用户归档等高级功能,而且WINC…

华为OD机试真题-考古学家-2023年OD统一考试(C卷)

题目描述: 有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。为了破解石碑内容,考古学家希望有程序能帮忙计算复原后的石碑文字组合数,你能帮忙吗? 输入描述: 第一行输入n,n表示石碑碎片的个数。 第二行依次输入石碑碎片上…

什么是PHP的SOLID原则?

SOLID 是面向对象编程(OOP)中的五个设计原则的首字母缩写,这些原则有助于创建可维护、灵活且可扩展的软件。以下是 SOLID 原则的概述: 单一职责原则(Single Responsibility Principle - SRP): 一…

[Angular] 笔记1:开发设置 , 双向绑定

1 设置开发环境 1.1 安装 node 下载 node,因为要使用 npm 工具,教程中使用 Angualr 14, 最新版 node 20 用不了,安装 node 16 就可以。 1.2 安装 Angular CLI Angular CLI 是用于创建 Angular 工程的工具集,使用如下命令&…

(第61天)多租户架构(CDB/PDB)

背景介绍 Oracle 的 CDB 和 PDB 是 Oracle 12C 及以上版本中引入的新概念,用于管理多租户数据库环境。 Oracle 数据库是商业数据库领域中的翘楚,其强大的功能和高可靠性备受企业用户追捧。而随着云计算和大数据时代的到来,Oracle 也不断推出新的技术以适应这些变化。CDB 技…

我为什么要当程序员?

阿七毕业于上海一所大学的管理学院,在读期间没写过一行 Java 代码。 管理学院,你出来能干啥呀?什么公司,会让你一个刚毕业的学生当管理呢?所有我们学院的同学,很多都跨科目考研、出国、创业。 家里没钱的…

【leetcode】链表总结

说明:本文内容来自于代码随想录 链表基本操作 https://leetcode.cn/problems/design-linked-list/ 删除节点 https://leetcode.cn/problems/remove-linked-list-elements/description/,删除节点,虚拟头节点。定义两个节点,分别…

『OPEN3D』1.5.2 动手实现点云栅格/体素最近邻

本专栏地址: https://blog.csdn.net/qq_41366026/category_12186023.html?spm=1001.2014.3001.5482 NEARBY6实现的voxel可视化 一种NEARBY14实现的可视化voxel

【LeetCode每日一题】152. 乘积最大子数组

题目: 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 思路 由于做了53. 最大子数组和 下意识觉得求出所有元素的以该元素结尾的连续…

QuPath学习 ② HE scripts

文献中详细介绍了处理H&E scripts的详细过程,计算H&E染色的全切片中的肿瘤基质百分比。 步骤: 1.将相关幻灯片添加到QuPath项目中。 2.对于项目中的每张幻灯片,围绕一个有代表性的肿瘤区域绘制一个注释。 3.运行“Estimate _ bac…

LeetCode190. Reverse Bits

文章目录 一、题目二、题解 一、题目 Reverse bits of a given 32 bits unsigned integer. Note: Note that in some languages, such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer type. They sho…

【Flink-Sql-Kafka-To-ClickHouse】使用 FlinkSql 将 Kafka 数据写入 ClickHouse

【Flink-Sql-Kafka-To-ClickHouse】使用 FlinkSql 将 Kafka 数据写入 ClickHouse 1)需求分析2)功能实现3)准备工作3.1.Kafka3.2.ClickHouse 4)Flink-Sql5)验证 1)需求分析 1、数据源为 Kafka,定…

每日一博 - Cache Miss Attack

文章目录 概述解决思路缓存空值键并设置短期 TTL(生存时间)使用布隆过滤器 伪代码1. 缓存空值键并设置短期 TTLa. 缓存空值键b. 设置短期 TTL 2. 使用布隆过滤器a. 集成布隆过滤器b. 查询布隆过滤器 进一步优化系统性能的建议 概述 在缓存管理中&#x…