扩展欧几里德算法 线性同余方程 中国剩余定理

线性同余方程组学习笔记 目录 1 扩展欧几里德算法1.1 gcd (a, b) = \gcd(b, a \% b)1.2 ax + by = c 的整数解1.2.1 裴蜀定理1.2.1 扩展欧几里德算法2 线性同余方程组2.1 同余方程2.2 同余方程组2.2.1 两个方程的情况2.2.2 k 个方程,模数两两互质2.2.3 k 个方程,模数两两不一定互质 1 扩展欧几里德算法 1.1 gcd (a, b) = \... 阅读详情
哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白以后再看真的觉得是挺简单的,有关这类问题的题目也不是很多,我就做了3个。下面把这类问题的资料整理一下,方便以后再看。

      欧几里德算法


  欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
  定理:gcd(a,b) = gcd(b,a mod b)
  证明:a可以表示成a = kb + r,则r = a mod b
  假设d是a,b的一个公约数,则有
  d|a, d|b,而r = a - kb,因此d|r
  因此d是(b,a mod b)的公约数
  假设d是(b,a mod b)的公约数,则
  d | b , d |r,但是a = kb +r
  因此d也是(a,b)的公约数
  因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证
  欧几里德算法就是根据这个原理来做的,其算法用C++语言描述为:
  

        int GCD(int a,int b)

        {

               while (b!=0) { int k=b; b=a%b; a=k; }

              return a;

        }

       扩展欧几里德算法


  扩展欧几里德算法是用来在已知a, b求解一组p,q使得p * a+q * b = Gcd(a, b) (解一定存在,根据数论中的相关定理)。

     算法描述为:

        int extended_gcd(int a,int b,int &x,int &y)

        {

             int ans,t;

             if (b==0) { x=1; y=0; return a; }

             else { ans=extended_gcd(b,a%b,x,y); t=x; x=y; y=t-(a/b)*y;}

             return ans;

        }

  把这个实现和Gcd的递归实现相比,发现多了下面的x,y赋值过程,这就是扩展欧几里德算法的精髓。


  可以这样思考:
  对于a' = b, b' = a % b而言,我们求得x, y使得a'x + b'y = Gcd(a', b')
  由于b' = a % b = a - a / b * b (注:这里的/是程序设计语言中的除法)
  那么可以得到:
  a'x + b'y = Gcd(a', b') ===>
  bx + (a - a / b * b)y = Gcd(a', b') = Gcd(a, b) ===>
  ay +b(x - a / b*y) = Gcd(a, b)
  因此对于a和b而言,他们的相对应的p,q分别是y和(x-a/b*y)。

    线性同余方程

        

     对于方程 a*x+b*y=n;有整数解得充分必要条件是(n %(a,b)==0),这个定理这里就不证明了,数论书上都有。

     所以方程 a*x+b*y=n;我们可以先用扩展欧几里德算法求出一组x0,y0。也就是a*x0+b*y0=(a,b);然后两边同时除以(a,b),再乘以n。这样就得到了方程a*x0*n/(a,b)+b*y0*n/(a,b)=n;我们也就找到了方程的一个解。

     还有一个定理:若(a,b)=1,且x0,y0为a*x+b*y=n的一组解,则该方程的任一解可表示为:x=x0+b*t,y=y0-a*t;且对任一整数t,皆成立。(这个证明比较简单,就不写了)

     这样我们就可以求出方程的所有解了,但实际问题中,我们往往被要求去求最小整数解,所以我们就可以将一个特解x,t=b/(a,b),x=(x%t+t)%t;就可以了。

    方程组的情形(中国剩余定理)

     对于同余方程组:

      x=a1 (mod m1);   1

      x=a2 (mod m2);    2

      方程组有一个小于m(m1,m2的最小公倍数)的非负整数解的充分必要条件是(a1-a2)%(m1,m2)==0 ,同样利用扩展欧几里德算法。

      两式联立:a1+m1*y=a2+m2*z。

      则:a1-a2=m2*z-m1*y; 这样就可以了解出z和y,则:x=a2+m2*z;  

      现在我们将其推广到一般情形:(设m1,m2,···,mk两两互素)

      x=a1(mod m1);

     x=a2(mod m2);

      ···

      x=ak(mod mk);其在M=m1*m2*···*mk;中有唯一整数解。

      记Mi=M/mi;因为(Mi,mi)=1,故有两整数pi,qi满足Mi*pi+mi*qi=1,如果记ei=Mi*pi;那么:ei=0 (mod mj),j!=i; ei=1(mod mj),j=i;

      很明显,e1*a1+e2*a2+···+ek*ak就是方程的一个解,加减M倍后就可以得到最小非负整数解了。

      如果m1,m2,···,mk不互素,那只能两个两个求了。

      x=a1 (mod m1);  

      x=a2 (mod m2);   

      解完后,a=x; m=m1和m2的最小公倍数。即可。

      暂时就写到这里,多元的高次的我还没看,这里推荐几道题目:pku2115;pku2891;pku1061;pku1006;pku2142;强烈推荐sgu106;题目的结题报告我也会贴在博客里。

 

原文地址:http://hi.baidu.com/sunhaowenprime/item/5626e3e69858afaec10d7522

光学系统设计:波段、光源、光纤与探测器匹配指南 在光学测量和光纤通信系统中,波段、光源、光纤和探测器的匹配关系是系统设计的核心基础。波段指电磁波谱中的特定波长范围,光源负责产生特定波长的光信号,光纤作为传输介质需要与波长匹配以降低损耗,探测器则负责将光信号转换为电信号。理解各组件的光谱特性对于系统性能至关重要,例如在850nm短波长多模光纤系统中,VCSEL激光器与PIN光电二极管的组合能提供最佳性价比。典型应用场景包括生物医学成像、光纤通信和气体传感,其中光谱重叠优化、模场直径匹配和偏振特性协调是关键技术要点。通过实测数据对比不同组合的传输性能,可以为 阅读详情

相关推荐

馈电网络设计:通过Smith圆图工具完成微带线到同轴探针的阻抗匹配

Smith圆图通过图形化阻抗变换路径,显著简化微带线到同轴探针的匹配设计。设计需结合理论计算(微带线阻抗公式、探针等效模型)、圆图操作(串联/并联元件移动规则)及仿真验证,最终实现宽带低反射匹配。

百态·数智思维 | 聚焦大数据、量化与未来AI 1106

中国剩余定理解线性同余方程

先说一个典故:淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信马上说出人数:1049。而在一千多年前的《孙子算经》中,也有这样一道算术题:“今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”按照今天的话来说:一个数除以3余2,除以5余3,除以7

he_qiao_2010的专栏 3044

PSIM+PIL+CCS三剑客:手把手教你搞定DSP28335的软硬件联合调试

本文详细介绍了如何利用PSIM、PIL与CCS三款工具,实现DSP28335的软硬件联合调试。通过搭建兼容环境、从PSIM仿真生成PIL代码,再到实战联合调试与问题诊断,手把手指导开发者构建从虚拟模型到实际硬件的完整验证闭环,有效提升电力电子与电机驱动等领域的开发效率与可靠性。

weixin_29183637的博客 186

计算最大公约数的两种算法

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b)其算法用C++语言描述为:int gcd(int m, int n){ if (m == 0)  return n; if (n == 0)  return m; if (m  {  int tmp = m;  m = n;  n = tmp; 

731

在统信UOS Server 20上踩坑记:手把手教你搞定openGauss 5.0.0企业版安装(附常见报错解决方案)

本文详细记录了在统信UOS Server 20上安装openGauss 5.0企业版的实战经验,包括环境准备、依赖库问题、目录权限、内存参数调优等常见问题的解决方案。通过伪装系统标识、建立软链接、调整内存参数等方法,成功克服国产操作系统与企业级数据库的兼容性挑战,为开发者提供了一份深度排雷指南。

weixin_28698059的博客 263

从原理到实战:ARS548 4D毫米波雷达数据处理与多模态融合全解析

本文深入解析了4D毫米波雷达ARS548的工作原理与数据处理全流程。从FMCW测距测速、MIMO虚拟天线阵列到点云生成的三步FFT处理,提供了详尽的Python代码实现。文章进一步探讨了与激光雷达、相机的多模态时空对齐与融合策略,并指导如何构建用于自动驾驶感知训练的多模态标注数据集,为相关算法工程师提供了从理论到实践的完整指南。

weixin_29161719的博客 366

POJ_2115_CLooooops_扩展欧基里德

今天困成狗,m

_Aka 490

保姆级教程:在STM32CubeIDE上快速部署micro_ros到STM32F407(附常见问题解决)

本文提供了一份详细的保姆级教程,指导开发者如何在STM32CubeIDE上快速部署micro_ros到STM32F407微控制器。内容涵盖从Windows与Ubuntu双环境搭建、micro-ROS静态库编译、STM32CubeIDE工程深度集成,到串口通信联调与常见问题解决的完整流程,旨在帮助读者构建稳定可靠的ROS2与嵌入式设备通信系统。

o4p5q6r7s的博客 323

线性同余方程组-中国剩余定理or合并方程

线性同余方程组即若干个线性同余方程的组合。求解方式可以参考我们普通的方程组,先解式1,将式1的通解带入式2后化简,再解式2,如此重复即可得满足所有式子的解。例如 以上适合笔算,但是在程序中表述一般解法,就需要用到等式合并或者中国剩余定理线性方程组解法与推理方法一,合并线性同余方程以下为推导,红色圈出部分为编码时所用的结论。...

渣渣 5883

Blender----利用DEM(tif)生成三维模型

利用DEM(tif)生成三维模型

LongJ_Sir的博客 5422

PLC为西门子的S7-1200,舵机为 DS3218,PLC控制舵机旋转程序实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 998

中国剩余定理与线性同余方程组求解

线性同余方程组 中国剩余定理 线性同余方程组 实际上一元一次线性同余方程组,形式如下: ⎧⎩⎨x≡r0(modm0)x≡r1(modm1)⋯{x≡r0(modm0)x≡r1(modm1)⋯ \begin{cases} x\equiv{r_0}({\rm{mod}}\,m_0) \\ x\equiv{r_1}({\rm{mod}}\,m_1) \\ \cdots \end{ca...

RBS的专栏 5052

【Jenkins】Jenkins :首次登录直接使用 admin 账户

目录 一、使用admin账户 二、修改admin用户密码 三、管理视图 一、使用admin账户 安装时,自定义安装,选择必要的插件安装,设置Jenkins的URL为: http://本机或服务器IP:8080 然后在创建第一个管理者界面,直接选择:使用admin 二、修改admin用户密码 进入:系统管理——管理用户——选中用户——点击设置图标——修改密码: 三、...

顾三殇 —— 博客空间(软件测试) 1万+

扩展欧几里德算法 线性同余方程 中国剩余定理 (转载)

链接地址:http://hi.baidu.com/%B1%BF%D0%A1%BA%A2_shw/blog/item/0676025d56a87d4afbf2c093.html 对这位作者表示感谢 哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白...

weixin_30550271的博客 143

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【转】扩展欧几里德算法 线性同余方程 中国剩余定理

转载自笨小孩_shw 哎呀,经过这两三天的奋斗,终于搞懂了一类问题——用扩展欧几里德算法求解线性同余方程。其实这类问题应该是比较基础也比较简单的,但我由于几乎没有一点数论的基础,所以还是难为了我不久,等现在彻底搞明白以后再看真的觉得是挺简单的,有关这类问题的题目也不是很多,我就做了3个。下面把这类问题的资料整理一下,方便以后再看。 欧几里德算法 ...

weixin_30511039的博客 116

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[转]经典讲解: 扩展欧几里德算法 线性同余方程 中国剩余定理

 欧几里德算法  欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:  定理:gcd(a,b) = gcd(b,a mod b)  证明:a可以表示成a = kb + r,则r = a mod b  假设d是a,b的一个公约数,则有  d|a, d|b,而r = a - kb,因此d|r  因此d是(b,a mod b)的公约数  假设d 是(b,a

笑风生 2609

线性同余方程组

线性同余方程 线性同余方程的形式:ax ≡ b (mod m),意思就是求解x的值使得 (a*x)%m=b%m 一、首先复习一下模运算,对于模运算,有以下等式成立: 假设a ≡ c (mod m)且b ≡ d(mod m),则: a + b ≡ c + d (mod m) a - b ≡ c - d (mod m) a * b ≡ c * d (mod m) 对于除法来说相对复杂一点 虽然2 ...

qq_43710979的博客 2435

扩展欧几里德求解线性同余方程组相关~

现在理解了,怕以后忘了。 记录一下。。我们都知道欧几里德算法,又叫辗转相除法。 gcd(a,b) = gcd(b,a%b); 代码实现为int gcd(int a,int b) { return b ? gcd(b,a%b) : a; }扩展欧几里德 对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然 存在整数对

No Program No Life 716

扩展欧几里德与中国剩余定理学习笔记&&模版

蒟蒻这几天比较闲,于是自学了早就学了很久的扩欧与中国剩余定理。。。。。。 --------------------------------------------------------------------------------------------------------------扩展欧几里德----------------------------------------------

Lcomyn的专栏 966
上一篇: 北大ACM题目分类
下一篇: 欧几里得扩展算法详解及POJ1061
热血大婶
博客等级 码龄16年 58粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值