从原理到实践:详解辗转相除法(欧几里得算法)
创作时间:
作者:
@小白创作中心
从原理到实践:详解辗转相除法(欧几里得算法)
引用
CSDN
1.
https://blog.csdn.net/case_break/article/details/142426462
辗转相除法,又称欧几里得算法,是一种用于计算两个正整数最大公约数的算法。本文将从原理到实践,深入探讨这一经典算法。
辗转相除法原理
计算步骤
辗转相除法的基本步骤如下:
- 给定两个正整数a和b(a > b)
- 计算a除以b的余数c
- 将b赋值给a,将c赋值给b
- 重复步骤2和3,直到余数为0。此时的b即为最大公约数
图形理解
通过树形图可以更直观地理解辗转相除法的计算过程:
在这个图中,蓝色部分表示初始数据。除根节点外,每层节点左边是除数,右边是余数,每层数值加起来等于父节点的值,每层的余数是下一层的除数。
公式推导
假设 a % b = R1,则 a = n1 * b + R1
假设 b % R1 = R2,则 b = n2 * R1 + R2
……
一直往下算可以发现,所有数值关系都可以由余数R1、R2 … Rn来表达。当Rn与Rn-1存在倍数关系后,Rn就可以通过倍数关系表达初始数据a和b。
代码实现
接下来,我们通过一个LeetCode题目来实践辗转相除法的应用:
题目:找出数组的最大公约数
给你一个整数数组 nums ,返回数组中最大数和最小数的最大公约数。
两个数的最大公约数是能够被两个数整除的最大正整数。
class Solution {
public int findGCD(int[] nums) {
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
for(int i = 0 ; i < nums.length; i++){
if(nums[i] > max){
max = nums[i];
}
if(nums[i] < min){
min = nums[i];
}
}
return realFindGCD(max, min);
}
//通过递归计算a、b的最大公约数
public int realFindGCD(int a, int b){
if(a % b == 0){
return b;
}
return realFindGCD(b, a%b);
}
}
这段代码首先找到数组中的最大值和最小值,然后通过递归函数realFindGCD计算这两个数的最大公约数。递归函数的核心逻辑是:如果a能被b整除,则b就是最大公约数;否则,继续用b和a%b进行递归计算。
总结
辗转相除法是一个简单而优雅的算法,通过递归或循环都能很好地实现。它不仅在数学中有广泛应用,在计算机科学中也是基础算法之一。理解其原理和实现方法,对于提升算法思维大有裨益。
热门推荐
什么是投资组合?
《进击的巨人》剧情深度解析:一场没有救赎的悲剧实验
什么是大热点?如何判断一个话题是否成为大热点?
决战在即,中国U20与沙特U20备战情况及战术分析
警惕!黄鳝鲫鱼等常见食材可能携带寄生虫,这些食用风险需注意
2025年江西单招语文、数学从校考改为省考,会带来哪些影响?
微软Win11十二月更新翻车:开始菜单卡顿无响应、游戏性能下降
解决复杂问题,你需要两种思维:线性思维与系统思维
评估有氧能力、适量补充碳水,糖友运动要做足准备
五本高品质星际文明科幻小说,带你探索宇宙星空,发现未知的文明!
量子纠缠:揭示宇宙奥秘与人生意义的新视角
头肩底形态:股市反转的“黄金信号”,如何精准把握?
如何查看HTML文件里的内容
王羲之和王献之父子都是书圣!王羲之行书普门品七
液相色谱柱恒温箱:使用技巧与注意事项的解析
详解GPT模型的前世今生
夏日钓鱼,如何选择和使用玉米饵料?让你的垂钓之行满载而归
格力空调深度清洗:全面清洁与维护指南
小米主板维修的全面指南(了解小米主板故障排查与维修技巧,让你的手机焕然一新)
客厅吊顶设计指南:从层高到风格,再到具体造型
肾轻度积水不可怕,五大管理妙招助你轻松应对!
春节期间你吵架了么?年轻人不想回家过年,可能并不是工作太忙
江歌案责任与赔偿探讨:刘鑫是否应承担刑事责任?
低压灯带延迟2秒才亮的原因分析
成都中医肿瘤研究院罗程:阴阳平衡是抗瘤关键
日本自由行:出发前必看!超实用的日本旅游“冷知识”(2024最新)
“技术极客”徐明星的转型之路,是辉煌再续,还是梦断江湖?
宠物寄养行业机遇与挑战并存 品质与差异化成竞争关键
深入解析电流检测电路的原理与应用
止咳“神器”的使用注意事项您了解吗?