欧几里德算法、拓展欧几里德、中国剩余定理

article/2025/9/18 7:13:26

目录

  • 欧几里德算法(Euclidean algorithm)(辗转相除法)
  • 拓展欧几里德算法
  • 中国剩余定理
    • 作业1:
    • 作业2:

欧几里德算法(Euclidean algorithm)(辗转相除法)

欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数。

简单点说一下算法原理:两个整数的最大公约数等于其中小的那个数跟大除以小余数的最大公约数。
即: gcd(a,b)=gcd(b,a mod b) 。

举个简单的例子:
比如求 10跟 24 的最大公约数a = gcd(10, 24):

  1. 求10和24的最大公约数等于求10跟4的最大公约数 :
    a = gcd(10, 24) = gcd(10, 4)
  2. 求10跟4的最大公约数等于求4跟2的最大公约数,为2 :
    a = gcd(10, 24) = gcd(10, 4) = gcd(4, 2) = 2
# python
def gcd(a, b):return a if b == 0 else gcd(b, a % b)
print(gcd(10,24)) # 2

拓展欧几里德算法

算法原理:若a和b为正整数,则存在整数x, y 使得gcd(a,b)=ax+by;
通俗点说就是 gcd(a,b)可以表示为a,b的整数线性组合。

举个简单的例子:
gcd(10, 24) = 2
2 = 10*(-7) + 24*3

主要应用有以下三方面:

  1. 求解不定方程;
    例题:求 435x + 783y = 87 的一组整数解:

    先通过欧几里得算法得:

     783 = 1× 435 + 348435 = 348×1 + 87348 = 87 × 4 + 0∴ 87 = 435 – 34887 = 435 – (783 – 435)87 = (–1)(783) + 2(435)∴ x = 2, y = −1是此不定方程的一组整数解。
    
  2. 求解模的逆元(乘法逆元),参考上一篇同余方程、欧拉函数、乘法逆元、定义在Zm上的矩阵求逆;

  3. 求解模线性方程(线性同余方程);

    1. 求解同余方程 ax ≡ b (mod m), x = ?
      举个极端代表性的例子: 15x = 1 mod 26
      这道题转化成15x - 26y = 1 既可以当做1求解不定方程 ,也可以当做2求乘法逆元

       解法如下:26 = 1× 15 + 1115 = 11×1 + 411 = 4 × 2 + 34 = 1 × 3 + 13 = 1 × 3 ∴ 1 = 4 – 3= 4 – (11 – 4×2)= 4×3 – 11= (15-11) ×3 - 11= 15×3 - 11×4= (26-11)×3 - 11 ×4= 26×3 - (26 - 15)×7=26×(-4) + 15×7∴ x = 7, y = −4 为此不定方程的一组整数解,15关于模26的乘法逆元为7
      
    2. 求解同余方程组 继续往下看中国剩余定理

中国剩余定理

在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3 余2),
五五数之剩三(除以5 余3),七七数之剩二(除以7 余2),问物几何?”

宋朝数学家秦九韶于1247年《数书九章》卷一、二《大衍类》对“物不知数”问题做出了完整系统的解答。明朝数学家程大位将解法编成易于上口的《孙子歌诀》:

三人同行七十稀,
五树梅花廿一支,
七子团圆正半月,
除百零五便得知。

意思是只要是除以3余了一个1,就加上一个70;
只要是除以5余了一个1,就加上一个21;
只要是除以7余了一个1,就加上一个15。然后累加。
最后计算这个总和除以105的余数。
也就是 (2×70 + 3×21 + 15×2 ) mod 105 = 23

解法如下:

先从3和5、3和7、5和7的公倍数中相应地找出分别被7、5、3除均余1的较小数15、21、70 ( 此步又称为求"模逆"运算,参考乘法逆元解法)。即:
15÷7=2……余1,
21÷5=4……余1,
70÷3=23……余1.
再用找到的三个较小数分别乘以所要求的数被7、5、3除所得的余数的积连加,
15×2+21×3+70×2=233.
最后用和233除以3、5、7三个除数的最小公倍数.
233÷105=2……余23,
这个余数23就是合乎条件的最小数.

拓展到一般情况:
假设整数m1, m2, … , mn两两互质,则对任意的整数:a1, a2, … , an 方程组:
在这里插入图片描述
都存在整数解,且若X , Y 都满足该方程组,则必有 X ≡ Y (mod N) 其中:
在这里插入图片描述
公式如下:
在这里插入图片描述

课本上的公式符号实在不想看,就拿作业来举两个例子吧。

作业1:

求解同余方程组:
x ≡ 12 (mod 25)
x ≡ 9 (mod 26)
x ≡ 23 (mod 27)

以上方程组等价于 x = 25a + 12 = 26b + 9 = 27c + 23
移一下项 得:
① : 25a - 27c = 23-12 = 11
②: 26b - 25a = 12-9 = 3

首先对①式运用拓展欧几里得:

27 = 25×1 + 2
25 = 2×7 + 11
则: 
11 = 25 - 2×7= 25 - (27-25) ×7= 25×8 - 27×7
所以a=8, c=7 
代入x = 25a + 12  = 27c + 23 得:
x = 212

得到合并方程 x = 212 + 25 × 27t 即:x ≡ 212 (mod 675)
然后再跟x ≡ 9 (mod 26) 合并

x = 212 + 675t = 26b + 9
26b - 675t = 203
675 = 26×25+25
25 = 25×1
所以:  
203 = (26-25)×203= (26 - (675-26*25))×203=  26×5278 - 675×203
b=5278 , t=203
代入得x = 137237

得到合并方程 x = 137237 + 25 × 27×26t 即:x ≡ 137237 (mod 17550) , x=14387
x = 14387 + 17550n (n∈Z)

作业2:

求解如下同余方程组:
13x ≡ 4 (mod 99)
15x ≡ 56 (mod 101)

这类同余方程组带着系数让人头大,但是也不妨碍使用拓展欧几里德,
首先去掉系数:
x ≡ 46 (mod 99)
x ≡ 98 (mod 101)

求解方法很多,这里列举利用二元一次不定方程方法:
13x ≡ 4 (mod 99) 转化为 13x-99y = 4
然后用拓展欧几里德:
13×46-99×6 = 4
x=46, y=6
所以不定方程13x-99y = 4 的所有解为
x=46 + 99t
y=6+13t
所以原同余方程解为:x ≡ 46 (mod 99)

消去x得: 99a - 101b = 52
拓展欧几里德走你:x = 7471 (mod 9999)
x = 9999 n + 7471 (n ∈ Z)


http://chatgpt.dhexx.cn/article/hyIMQJZZ.shtml

相关文章

logit回归模型_一文读懂条件Logistic回归

在医学研究中,为了控制一些重要的混杂因素,经常会把病例和对照按年龄,性别等条件进行配对,形成多个匹配组。各匹配组的病例数和对照人数是任意的,比如一个病例和若干个对照匹配即1:1,在医学上称作“1:1病历对照研究”,常见还有1:M(M <=3),即1个病例和1或2或3个对照…

目标检测-定位蒸馏:logit蒸馏与feature蒸馏之争

定位蒸馏 &#xff08;LD, CVPR 2022&#xff09; 先上我们文章和代码&#xff1a; 论文标题&#xff1a; Localization Distillation for Dense Object Detection 论文地址&#xff1a; https://arxiv.org/abs/2102.12252 代码地址1&#xff1a; https://github.com/HikariTJU…

biogeme-nest_logit-cnblog

biogeme-nest_logit 基础数据&#xff1a; optima.dat 变量的描述&#xff1a;出处 OccupStat&#xff1a;职业TimePT&#xff1a;公共交通通行时间TimeCar&#xff1a;小汽车通行时间MarginalCostPT&#xff1a;公共交通总成本CostCarCHF&#xff1a;小汽车的总汽油成本dis…

必看 logit回归分析步骤汇总

Logit回归分析用于研究X对Y的影响&#xff0c;并且对X的数据类型没有要求&#xff0c;X可以为定类数据&#xff08;可以做虚拟变量设置&#xff09;&#xff0c;也可以为定量数据&#xff0c;但要求Y必须为定类数据&#xff0c;并且根据Y的选项数&#xff0c;使用相应的数据分析…

PyTorch logit函数

1.PyTorch vs TensorFlow tensorflow是静态图&#xff0c;需要你把啥都准备好&#xff0c;然后它像个傻子一样执行&#xff0c;tensorflow&#xff0c;目前业界更适合部署&#xff0c;毕竟是静态图&#xff0c;infer的时候速度快。 pytorch&#xff0c;它会在执行的时候&…

logit回归模型_详解 Logit/Probit 模型中的 completely determined 问题

NEW!连享会推文专辑:Stata资源 | 数据处理 | Stata绘图 | Stata程序结果输出 | 回归分析 | 时间序列 | 面板数据 | 离散数据交乘调节 | DID | RDD | 因果推断 | SFA-TFP-DEA文本分析+爬虫 | 空间计量 | 学术论文 | 软件工具 连享会学习群-常见问题解答汇总:👉 WD 主页…

Logit Adjust

Logit Adjust BER 我们在分类问题中常用的误分类函数使得分类器最终学到的分布&#xff1a; P ( y ∣ x ) ∝ P ( y ) P ( x ∣ y ) P(y|x) \propto P(y)P(x|y) P(y∣x)∝P(y)P(x∣y) 假设在一个不平衡猫狗二分类问题中&#xff0c;狗是一个小类&#xff0c;只有整个数据集的…

logit

1.为什么需要logit回归? 线性回归不稳健 异常点对拟合直线的影响很大 so linear不适合做分类问题 2.为什么要sigmoid&#xff1f;sigmoid能做什么&#xff1f; y0&#xff0c;1是离散问题,直接建立方程 函数不连续——损失函数不可导——参数无法用梯度法优化 所以我们由 …

Logit 是怎么算的?

从知乎借几张图来描述&#xff0c;先看看odds 是什么&#xff1f; 然后Logit 就 是 Log of odds&#xff1a;

【计算机网络学习笔记】(汇总目录)

计算机网络学习笔记&#xff08;汇总目录&#xff09; 文章目录 点击以下标题&#xff0c;跳转到对应章节的详细讲解 【计算机网络学习笔记01】计算机网络概述&#xff08;上&#xff09; 【计算机网络学习笔记02】计算机网络概述&#xff08;中&#xff09; 【计算机网络学习…

计算机网络期末总结复习(全)

文章目录 第一章:概述1.1、计算机网络在信息时代的作用我国互联网发展状况1.2、因特网概述1、网络、互连网(互联网)和因特网2、因特网发展的三个阶段3、因特网的标准化工作4、因特网的组成补充:1.3 三种交换方式1、电路交换(Circuit Switching)2、分组交换(Packet Switc…

计算机网络的应用领域有那些,计算机网络应用领域

描述 计算机网络应用领域 一、计算机网络在现代企业中的应用 计算机网络的发展和应用改变了传统企业的管理模式和经营模式。在现代企业中企业信息网络得到了广泛的应用。它是一种专门用于企业内部信息管理的计算机网络,覆盖企业生产经营管理的各个部门,在整个企业范围内提供硬…

《王道计算机网络》学习笔记总目录+思维导图

0.思维导图 本篇文章是对《2021王道计算机网络》所有知识点的笔记总结归档&#xff0c;虽说是2021年的&#xff0c;但是这些都是最核心的底层基础知识&#xff0c;过多少年都不会有很大的变化&#xff0c;核心都差不多。我的武功秘籍&#xff1a;note.bithachi.cn&#xff0c;…

计算机必备学习网站

目录 1 论文代码网站 &#xff08;1&#xff09;Github&#xff1a;www.github.com/ &#xff08;2&#xff09;Papers With Code&#xff1a;https://paperswithcode.com/ &#xff08;3&#xff09;researchcode&#xff1a;Research Code &#xff08;4&#xff09;sema…

内联函数的使用与引用

内联函数的执行过程与带参数宏定义很相似&#xff0c;但参数的处理不同。带参数的宏定义并不对参数进行运算&#xff0c;而是直接替换&#xff1b;内联函数首先是函数&#xff0c;这就意味着函数的很多性质都适用于内联函数&#xff0c;即内联函数先把参数表达式进行运算求值&a…

内联函数的意义和使用

1. 内联函数 在C中我们通常定义以下函数来求两个整数的最大值&#xff1a; 复制代码 代码如下: int max(int a, int b) { return a > b ? a : b; } 为这么一个小的操作定义一个函数的好处有&#xff1a; ① 阅读和理解函数 max 的调用&#xff0c;要比读一条等价的条件表达…

内联函数和类-初阶

目录 前言 一、内联函数 二、typeid 三、范围for的使用 四、nullptr 五、类 六、class和访问限定符 总结 前言 多多重复&#xff0c;百炼成钢&#xff01;&#xff01;&#xff01; 一、内联函数 用inline修饰的函数叫内联函数-在编译时C编译器会在函数的位置展开&#xff0c;…

内联函数——C++

内敛函数的定义&#xff1a; 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率 &#xff08;它是以空间换取时间的方式提高效率&#xff0c;这里的空间指的…

【内联函数】inline关键字的作用与内联函数的特性

学习导航 一、内联函数产生的意义二、内联函数的使用三、内联函数的作用①简单易懂②支持调试③支持类型检查 四、内联函数的特性 一、内联函数产生的意义 在C语言中&#xff0c;如果我们频繁调用某些函数&#xff0c;并且这些函数都很代码量都很小&#xff0c;那么写成宏定义的…

C++之 内联函数

目录 一、 内敛函数的概念 二、 查看内联函数 三、 内联函数的特性 四、 宏和内联函数 一、 内敛函数的概念 以 inline 修饰的函数叫做内敛函数&#xff0c;编译时C编译器在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行…