求最大公约数(最大公因数)—— 欧几里得算法
创作时间:
作者:
@小白创作中心
求最大公约数(最大公因数)—— 欧几里得算法
引用
1
来源
1.
https://www.cnblogs.com/1873cy/p/18469778
欧几里得算法,又称辗转相除法,是求解两个数最大公约数(GCD)的经典算法。这种方法通过不断用较小的数替换较大的数,并取余数,最终在余数为0时找到最大公约数。本文将详细介绍欧几里得算法的基本思想、具体步骤,并给出C++语言的迭代和递归实现方式。
欧几里得算法
欧几里得算法(又称辗转相除法)用于计算两个数的最大公因数,被称为是世界上最古老的算法。
基本思想
两个正整数 (a) 和 (b),它们的最大公约数 (\text{gcd}(a,b)) 与 (b) 和 (a) 除以 (b) 得到的余数的最大公约数 (\text{gcd}(b,a%b)) 相同。通过不断用较小的数替换较大的数,并取余数,最终在余数为0时找到最大公约数。
举例说明
以求 1112 与 695 这两个数的最大公约数为例:
- 首先用较大的数字除以较小的数字,求出余数,也就是堆两个数字进行模运算。得到余数 417
- 接下来再用除数 695 和余数 417 进行模运算,结果为 278。
- 继续进行同样的操作,对 417 和 278 作模运算,结果为139。
- 对 278 和 139 作模运算,结果为0,也就是说278可以被139整除。
- 余数为0时,最后一次运算中的除数 139 就是 1112 和 695 的最大公约数。
算法实现
以下是欧几里得算法的C++实现,包括迭代和递归两种方式:
#include "iostream"
using namespace std;
/*欧几里得算法—求最大公约数—迭代实现*/
int gcd(int a, int b){
while (b != 0){
int tmp = a;
a = b;
b = tmp % b;
}
return a;
}
/*欧几里得算法—求最大公约数—递归实现*/
int gcd_dg(int a, int b){
return b == 0 ? a : gcd_dg(b, a % b);
}
int main(){
cout << gcd(1112, 695) << endl;
cout << gcd_dg(1112, 695) << endl;
system("pause");
return 0;
}
本文原文来自博客园
热门推荐
三相不平衡的危害与解决方案
影响色谱分离的因素之——关于流动相不得不了解的基础知识
曦字怎么写:从结构到文化内涵的全面解析
创新IVD产品临床试验方案设计解析
自制手工面条,做一份传统美味(以传承的方式)
流浪动物咬坏小区内车辆,物业公司未尽职责被判赔
2025广州体育中考时间定了!评分标准和计分方式公布
Debian如何防止ARP欺骗攻击
讲再多时间管理,都不如这7条高效原则
当读书遇上AI 开启阅读新时代
身价暴跌的小龙虾,怎么了?
载人航天与空间科学“双向奔赴”
大数据技术在不同领域的应用有哪些?
数据科学导论:从概念到应用的全面解析
左旋肉碱与共轭亚油酸:减脂效果对比与使用建议
Z世代求职三大"苦"位:等到焦虑、拒接来电及难忍官腔 HR如何接招抢人才?
春节拜年习俗的起源与文化内涵
喜炎平注射液的功效与作用及使用说明书
南天竹的种植与护理指南
黄山山顶酒店全攻略:7家酒店特色与推荐
数字孪生智能工厂:从顶层设计到系统集成的完整架构
婚后财产继承房产归谁?一文详解继承规则
腾讯视频限制会员登陆设备数,爱优腾也要打击账号“共享”
21700锂电池参数详解:与18650锂电池的主要区别
辛硫磷能不能叶面喷施?叶面喷施的持效期较短
数字道教:从一到十,40个道教入门名词解释,简单明了,值得收藏
如何编写高质量的软件开发文档范例?
探究曹魏作为三国正统的历史依据,都有什么几个方面的原因?
尿糖体检经历:揭秘正常值与影响因素
5种中药方剂拯救难治贫血,医生都在用!