辗转相除法详解(C语言实现)
辗转相除法
- 定义
- 基本原理
- 原理
- 证明
- 算法实现
- 思想
- 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语言实现)相关推荐
- php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...
详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...
- #转载:杨辉三角形实现过程详解-c语言基础
杨辉三角形实现过程详解-C语言基础 十一一个人 2018-12-26 06:45:45 6465 收藏 28 最后发布:2018-12-26 06:45:45首发:2018-12-26 06:45:4 ...
- DBus glib 各数据类型接收与发送详解—C语言(3)
DBus glib 各数据类型接收与发送详解-C语言(3) 动机 前置知识 正文 Python 测试服务 使用 C 实现复杂数据类型的传递 DICT_DICT ObjectPath_Dict_Stru ...
- 详解go语言的array和slice 【二】
上一篇 详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲 ...
- 武林c语言,详解C语言中条件编译
预处理器提供条件编译,程序的不同部分可以在不同的条件下编译,从而产生不同的目标代码文件,这对于程序移植和调试非常有用,本文是武林技术频道小编给为大家带来的详解中条件编译,一起来了解一下吧! 通常情况, ...
- c语言malloc用法 数组,详解C语言用malloc函数申请二维动态数组的实例
详解C语言用malloc函数申请二维动态数组的实例 C语言在程序运行中动态的申请及释放内存十分方便,一维数组的申请及释放比较简单. Sample one #include int main() { c ...
- 你是真的“C”——详解C语言函数模块知识(上篇)
详解C语言函数模块知识(上篇)
- php 微信 公众 平台,微信公众平台代码详解-php语言(一)
2.这里把它粘贴出来,以注释的形式进行讲解. 3.首先我们要知道一些基础的知识: (1)要有自己的网站--公网环境,其中一个php页面处理微信消息: (2)微信公众平台和网站服务器之间是通过XML数据 ...
- 详解c语言main函数、printf函数、scanf函数与va家族
C语言入门与提升(1)--详解c语言main函数.printf函数与scanf函数,与va家族 前言: 为什么要学习C语言呢?C语言作为最古老的语言之一,走过了半个多世纪的风风雨雨,至今仍然长盛不衰, ...
最新文章
- LeetCode简单题之两个列表的最小索引总和
- python代码创建数据库_如何使用python ORM创建数据库表?
- legnano卡片 里怎么添加成员,设置标签,添加检查项?
- 掌握ASP.NET技术之捷径
- AutoHotKey Script AHK脚本++Topre Realforce 104Pro十周年纪念版静电容键盘
- Android开发-屏幕常亮的方法
- linux加载虚拟sriov网卡,如何配置BroadCOM网卡的SR-IOV功能
- CDH集群调优:内存、Vcores和DRF
- Lua学习教程之 可变參数数据打包与解包
- java 获取远程系统启动时间_从Java中的RuntimeMXBean获取系统启动时间
- git撤销单个文件的修改_程序员都要掌握的 Git 使用技巧【实践】
- python中def demo是什么意思_Python def函数的定义、使用及参数传递实现代码
- 显示器分辨率一直跳_常见屏幕比例与显示器分辨率详解
- eXtremeTable -
- cad 打开硬件加速卡_如何给自己的CAD配置加速,使其运行更快!
- R+ECharts2Shiny实现web动态交互式可视化数据(中)
- 【模电】0015 线性稳压电源的原理及分析
- 爬虫的原理和数据抓取
- iTunes 备份路径
- 小米回应造车;华为首次公布5G专利费率;中国电信整合5家公司成立新公司