当前位置: 首页 > news >正文

欧几里得算法(简单理解版,非严格证明)

        欧几里得算法用于求解两个整数的最大公约数,又称为辗转相除

        依据的基本定理:

                GCD(a,b)=GCD(a%b,b)

证明:

        对于搞理论的人可能需要会严格证明,但是对于我们一般人而言,只要能理解其原理并记住即可,后者实际上是非常简单的,且看:

        如果我们有两个数a, b,假设其最大公约数m

        那么有a%m==0,b%m==0

        那么我们是不是可以将a看成k*b+c,那么(k*b+c)%m=(k*b)%m+c%m=0+c%m,容易发现m也正是b与c的最大公约数,

        所以求a与b的最大公约数,也就是求c=a%b与b的最大公约数,于是基本定理就是这么来的:        

  •                 GCD(a,b)=GCD(a%b,b)

        那么这样辗转相除下去,最后一定会得到0,

        如果a是b的最大公约数m非1,那么得到(0,m),最大公约数就是m

        如果不是,那么最后a%b一定得1,即(1,b),然后b%1==0,最后得(0,1),最大公约数就是1

        这里需要注意参数顺序, 要么:

                GCD(a,b)=GCD(b,a%b)

                GCD(a,b)=GCD(b%a,b)

        不能写成GCD(a,b)=GCD(a%b,b),这样会死递归

        那么代码就可以写了:

int GCD(int a,int b)
{return a?GCD(b%a,a):b;
}

        

http://www.lryc.cn/news/516433.html

相关文章:

  • Mac软件介绍之录屏软件Filmage Screen
  • Ubuntu cuda-cudnn中断安装如何卸载
  • CSS——7.CSS注释
  • 鸿蒙APP之从开发到发布的一点心得
  • 某小程序sign签名参数逆向分析
  • 智能风控/数据分析 聚合 分组 连接
  • Unity3D PBR光照计算公式推导详解
  • 行为树详解(6)——黑板模式
  • Vue.js与其他框架有哪些兼容性?
  • Java 8 Stream 介绍
  • Java NIO、AIO分析
  • pip下载包出现SSLError
  • 零成本的互联网创业创意有哪些?
  • linux ubantu重启桌面
  • DeepSeek重新定义“Open“AI
  • iOS - 自旋锁
  • web应用网站如何启用http2请求
  • python进阶06:MySQL
  • mac 使用zip2john破解zip压缩包密码
  • 若依中Feign调用的具体使用(若依微服务版自身已集成openfeign依赖,并在此基础上定义了自己的注解)
  • 【算法题系列】LeetCode 5.最长回文子串|JavaScript 5种思路实现
  • 基于ROS先验地图的机器人自主定位与导航SLAM
  • nginx 1.6.3配置虚拟主机与rewrite-location匹配规则
  • 1130-host ... is not allowed to connect to this MySql serve
  • 力扣1502判断能否形成等差数列
  • Python版本变更历史及版本选择指南
  • 初始值变量类型
  • 苍穹外卖 项目记录 day03
  • 统计字符【2】(PTA)C语言
  • 如何在 Spring Cloud Gateway 中创建全局过滤器、局部过滤器和自定义条件过滤器