辗转相除法求两数的最大公约数

【C语言】辗转相除法最大公约数(详解) 辗转相除法两个整数最大公约数的一种常见算法。本文中,我们使用C语言实现了辗转相除法,并简要说明了其原理。通过实际的代码演示和运行结果,我们验证了辗转相除法的正确性。希望能够帮助到你理解该算法的实现过程。 阅读详情

1.最大公约数也叫最大公因数、最大公因子
2.记法:a,b两数最大公约数记为(a, b),对应两数最小公倍数记为[a, b];
3.求最大公约数常见方法:质因数分解法、短除法、辗转相除法(又叫欧几里得算法)、更相减损法

这里重点介绍辗转相除法求两数的最大公约数,总结一句话就是:
用除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。

例子:求1997 和 615 两个正整数的最大公约数
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1

用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。

c语言代码实现

#include<stdio.h>
//非递归的实现
int getGCD(int a, int b)	//a被除数, b除数,q余数 
{
	int q;
	q = a%b;
	while(q>0)
	{
		a = b;
		b = q;
		q = a%b;
	}
	return b;	
}
//递归实现
int gcd1(int a, int b)
{
	a = a%b;
	return a==0 ? b:gcd1(b, a);
}
//更简洁的递归实现
int gcd2(int a, int b)
{
	return b==0 ? a:gcd2(b, a%b);
}
int main()
{
	int m, n;
	scanf("%d %d", &m,&n);
	printf("%d", gcd1(m, n)); 
}
辗转相除法两数最大公约数(C语言) 辗转相除法两数最大公约数 /* m = 12(被除数) n = 8(除数) r = 4(余数) m = 8  n = 4  r = 4 m = 4  n = 4  r = 0 两数最大公约数 n = 4 */ #include <stdio.h> int main(){ int num1, num2,r =0; scanf("%d%d", &num1, &num2); while (r = num1%num2){ //取其变量值或算数运算后的值,0为fal 阅读详情

相关推荐

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】

NVIDIA Jetson Orin - 安装NVIDIA SDK Manager

dally2的博客 2623

详解“辗转相除法”(如何最大公约数

辗转相除法是用于两个非负整数最大公约数的高效方法这种方法可以不用去计算两个数谁大谁小,这样能够提高运算效率具体还是看我上面的手绘图加深一下理解。

C_Small_Cai的博客 1万+

PCIe 6.0 – 关于 PCI Express Gen6 您需要知道的一切

幸运的是,PCIe 6.0 FEC 足够轻,对延迟的影响最小。在电气层上,PCIe 6.0 使用 PAM4 信号(“四级脉冲幅度调制”),每个时钟周期将 2 位组合为 4 个幅度级别(00、01、10、11),与 PCIe 5.0 和前几代相比,它使用 NRZ 调制,每个时钟周期 1 位和两个幅度级别 (0, 1)。虽然 PAM4 信号更容易出错,但由于调制技术的性质,与 PCIe 5.0 相比,通道损耗不受影响,因此 PCB 上 PCIe 6.0 信号的范围将与 PCIe 5.0 相同。

qq_43416206的博客 3378

利用辗转相除法——最大公约数(详解)

辗转相除法 最大公约数: 给定两个数,两个数的最大公约数 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 例如:假如需要 100 和18 两个整数最大公约数,用欧几里得算法,是这样进行的: 100 / 18 = 5 (余 10) 18 / 10= 1(余8) 10 / 8 = 1(余2) 8 / 2 = 4 (余0) 至此,最大公约数为2 以除数和余数反复做除法运算,当余数为 0

H48530的博客 8万+

【算法】辗转相除法最大公约数

辗转相除法,又称欧几里德算法(Euclidean Algorithm),是两个数的最大公约数(greatestcommondivisor)的一种方法。用较大的数除以较小的数,再以除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数

Qiuhan_909的博客 6万+

辗转相除法——最大公约数(易懂详解)

辗转相除法——最大公约数(易懂详解)

weixin_64188098的博客 4万+

C语言实现两数的最小公倍数和最大公约数辗转相除法

最大公约数:对于两个或多个整数(非零),能同时整除它们的最大正整数。记作GCD(a,b)示例:GCD(15, 25) = 5,因 此5 是同时整除 15 和 25 的最大整数。最小公倍数:对于两个或多个正整数,能同时被它们整除的最小正整数,记作LCM(a, b)示例:LCM(4, 6) = 12,因 12 是同时被 4 和 6 整除的最小正整数

2503_92739857的博客 1559

Java实现:最大公约数计算。从键盘接收两个整数,编写程序出这两个整数最大公约数和最小公倍数(提示:最大公约数可用辗转相除法,最小公倍数则用两数的积除以最大公约数即可)。

最大公约数计算 从键盘接收两个整数,编写程序出这两个整数最大公约数和最小公倍数(提示:最大公约数可用辗转相除法,最小公倍数则用两数的积除以最大公约数即可)。 实现代码如下: import java.util.Scanner; public class test03 { public static void main(String[] args) { System.o...

HeiSQ的博客 1万+

两数最大公约数和最小公倍数三种方法(定义,辗转相除法与实用方法)

两数最大公约数和最小公倍数三种方法(定义,辗转相除法与实用方法)

Change_Jerry的博客 4281

辗转相除法两数最大公约数(递归实现)

辗转相除法两数最大公约数(递归实现) 最大公约数定义:如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。   辗转相除法(也叫欧几里德算法)原理: 早在公元前300年左右,欧几里得就在他的著作《几何原本》中给出了高效的解法——辗转相除法辗转相除法使用到的原理很聪明

古怪 5123

辗转相除法两数最大公约数

辗转相除法两个自然数的最大公约数的一种方法,也叫欧几里德算法。 例如,(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(377,319); ∵ 377÷319=1(余58) ∴(377,319)=(319,58); ∵ 319÷58=5(余29) ∴ (319,58)=(58,29); ∵ 58÷29=2(余0) ∴ (58,29)= 29; ∴ (319,3...

weixin_43772880的博客 266

使用辗转相除法和递归思想两数最大公约数

辗转相除法 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) => gcd(b,a mod b)。 算法简介 欧几里得算法是用来两个整数最大公约数的算法。(因为被欧几里得发明所以叫欧几里得算法) 扩展:欧几里得算法可用于RSA加密等领域。 假如需要 1997 和 615 两个整数最大公约数,用欧几里得算法,是这样进行的: 1997 / 615 = 3 (余 152) 615 / 152 = 4(余7) 15

李的博客 5410

解题—两数最大公约数与最小公倍数 #辗转相除法

(a,b)--> a,b 的最大公约数(a,b) 本质原理:a/b=q…r如果有两个整数a,b 便会存在唯一的一个整数q和r,满足式子 a/b=q...r 经过上面图形的启发,我们可得知:(a,b)=(b,r) 如何验证这个公式呢? 由a/b=q…r,可得a=b*q+r;以及r=a-b*q; 假设(a,b) = d1; 则可以得到 a= d1*m,b=d1*n,其中(n,m)=1,即m与n 互质;存在n与m均属于整数那么可知:r=d1*m -di*n*q= d1(m-ng);

Distinguished_z的博客 4703

辗转相除法两数最大公约数

/* * 程序的版权和版本声明部分 * Copyright (c)2013, 烟台大学计算机学院 * All rightsreserved. * 文件名称:xx.cpp * 作 者:赵加响 * 完成日期:2013年11月22日 * 版 本 号: v1.0 * 输入描述:两个整数 * 问题描述:用辗转相除法两数最大公约数 * 程序输出:两数最大公约数 * 问题分析:略

u012369106的专栏 1516

C语言两数最大公约数辗转相除法

两个数的最大公约数

2301_79744389的博客 1211

【C语言】辗转相除法两数中的最大公约数

相较于枚举法最大公因数,辗转相除法的时间复杂度相对较低,为O(logN)。

qq_74660726的博客 1248

两数最大公约数 -- 辗转相除法

直接给出结论: x 和 y的最大公约数 可以转为 x%y 和 y的最大公约数 (当然也可以y%x 和 x的最大公约数),这样依次递归,直到 x%y==0便取得最大公因数y。 下面给出一个最大公约数可以解决的问题: 来自leetcode /** * 给定一副牌,每张牌上都写着一个整数。 * 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: * 每组都有 X 张...

qq_38787214的博客 382

利用辗转相除法两数最大公约数和最小公倍数(附源码)

输入两个整数m和n, 最大公约数和最小公倍数. 用辗转相除法最大公约数 算法描述: m对n余为a, 若a不等于0 则 m 否则 n 为最大公约数 最小公倍数 = 两个数的积 / 最大公约数   关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,其等

changli_90的专栏 1万+

API SPECIFICATION 20E-2025 石油和天然气工业用合金和碳钢螺栓.rar

API SPECIFICATION 20E-2025 石油和天然气工业用合金和碳钢螺栓.rar

上一篇: 【PAT乙级1012】——数字分类
下一篇: 四舍五入与进一法
StevenAC
博客等级 码龄10年 16粉丝 66原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值