辗转相除法

  • 定义
  • 基本原理
    • 原理
    • 证明
  • 算法实现
    • 思想
    • C语言实现

定义

辗转相除法,被称为欧几里得(Euclidean)算法,是求最大公约数的算法。

基本原理

原理

两个正整数a和b(a > b),他们的最大公约数等于a除以b的余数和b之间的最大公约数。

证明

设 b = aq + r, (a,b) 为a, b的最大公约数
则a % (a,b) = 0; b % (a,b) = 0,
因为(a和b的约束) % (a,b) = 0,
所以 (b - aq) % (a,b) = 0
即 r % (a,b) = 0
因为a % (a,b) = 0, r % (a,b) = 0
所以(a,r) % (a,b) = 0(最大公约数一定被公约数整除)

又因为a % (a,r) = 0, r % (a,r) = 0, b = aq+r
所以 (aq + r) % (a,r) = 0
即 b % (a,r) = 0
因为 a % (a,r) = 0
b % (a,r) = 0
所以
(a,b) % (a,r) = 0
所以
(a,b) = (a,r)

算法实现

思想

a = b * q1 + r1
b = r1 * q2 + r2
r1 = r2*q3 + r3

rn-2 = rn-1 * qn + rn

rn-1 = 0, rn-2 即为最大公约数(
因为rn-2和0的最大公约数就是他本身rn-2,
又因为rn-2和0的最大公约数等于a和b的最大公约数,
所以rn-2即为a和b的最大公约数。

C语言实现

#include <stdio.h>
int main()
{int a;int b;scanf("%d %d", &a, &b);int u, v;u = a, v = b;      while (v != 0){int tmp1 = u % v;u = v;v = tmp1;}printf("%d\n", u);return 0;
}

辗转相除法详解(C语言实现)相关推荐

  1. php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...

    详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...

  2. #转载:杨辉三角形实现过程详解-c语言基础

    杨辉三角形实现过程详解-C语言基础 十一一个人 2018-12-26 06:45:45 6465 收藏 28 最后发布:2018-12-26 06:45:45首发:2018-12-26 06:45:4 ...

  3. DBus glib 各数据类型接收与发送详解—C语言(3)

    DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...

  4. 详解go语言的array和slice 【二】

    上一篇  详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲 ...

  5. 武林c语言,详解C语言中条件编译

    预处理器提供条件编译,程序的不同部分可以在不同的条件下编译,从而产生不同的目标代码文件,这对于程序移植和调试非常有用,本文是武林技术频道小编给为大家带来的详解中条件编译,一起来了解一下吧! 通常情况, ...

  6. c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例

    详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...

  7. 你是真的“C”——详解C语言函数模块知识(上篇)

    详解C语言函数模块知识(上篇)

  8. php 微信 公众 平台,微信公众平台代码详解-php语言(一)

    2.这里把它粘贴出来,以注释的形式进行讲解. 3.首先我们要知道一些基础的知识: (1)要有自己的网站--公网环境,其中一个php页面处理微信消息: (2)微信公众平台和网站服务器之间是通过XML数据 ...

  9. 详解c语言main函数、printf函数、scanf函数与va家族

    C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...

最新文章

  1. LeetCode简单题之两个列表的最小索引总和
  2. python代码创建数据库_如何使用python ORM创建数据库表?
  3. legnano卡片 里怎么添加成员,设置标签,添加检查项?
  4. 掌握ASP.NET技术之捷径
  5. AutoHotKey Script AHK脚本++Topre Realforce 104Pro十周年纪念版静电容键盘
  6. Android开发-屏幕常亮的方法
  7. linux加载虚拟sriov网卡,如何配置BroadCOM网卡的SR-IOV功能
  8. CDH集群调优:内存、Vcores和DRF
  9. Lua学习教程之 可变參数数据打包与解包
  10. java 获取远程系统启动时间_从Java中的RuntimeMXBean获取系统启动时间
  11. git撤销单个文件的修改_程序员都要掌握的 Git 使用技巧【实践】
  12. python中def demo是什么意思_Python def函数的定义、使用及参数传递实现代码
  13. 显示器分辨率一直跳_常见屏幕比例与显示器分辨率详解
  14. eXtremeTable -
  15. cad 打开硬件加速卡_如何给自己的CAD配置加速,使其运行更快!
  16. R+ECharts2Shiny实现web动态交互式可视化数据(中)
  17. 【模电】0015 线性稳压电源的原理及分析
  18. 爬虫的原理和数据抓取
  19. iTunes 备份路径
  20. 小米回应造车;华为首次公布5G专利费率;中国电信整合5家公司成立新公司

热门文章

  1. 你还不知道 BTree,B-Tree,B+Tree 的区别吗?
  2. 设计模式原则 - 接口隔离原则(二)
  3. 15米 GMSLFPDLink传输线束降速问题
  4. 关于纳尔逊的内集理论
  5. linux访问工具图标,linux上的编码转换工具iconv,enca,convmv
  6. 【MySQL】查看支持的字符集show character set;
  7. 机器人兴趣班奖状_拼音兴趣班奖状导师寄语
  8. PHICH介绍(2)
  9. 蓝桥杯试题:Fibonacci数列
  10. SOA(面向服务的架构)