从原理到实践:详解辗转相除法(欧几里得算法)
创作时间:
作者:
@小白创作中心
从原理到实践:详解辗转相除法(欧几里得算法)
引用
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进行递归计算。
总结
辗转相除法是一个简单而优雅的算法,通过递归或循环都能很好地实现。它不仅在数学中有广泛应用,在计算机科学中也是基础算法之一。理解其原理和实现方法,对于提升算法思维大有裨益。
热门推荐
年轻人为什么越来越执着于考公?
SWIFT报文字段完整解读:每个字段的业务含义与应用
打碟是什么意思?了解DJ打碟的艺术
白羊女喜欢什么礼物?从星座特质到搭配指南
大蒜发芽的秘密:能否食用及背后的健康奥秘
WordNet介绍:一个英语词汇数据库
二手房房屋漏水纠纷处理指南
初学日语入门50音图该如何记忆?详细为你讲解快速记忆法
怎么做一个新产品的前期用户调研
如何管理好团队:从理解人性到建立高效团队
租房管理系统现代化转型之路探索提升管理效率与客户关系的策略
南非卡勒顿维尔金矿:激光扫描与3D建模助力地下变电站改造
伤口敷料的种类有哪些 如何选择伤口敷料
盘点重庆最有名的六大特色名菜,外地人惊叹频频,本地人爱不释手
跨专业考研完全指南:挑战与应对策略
不锈钢和碳钢哪种更耐腐蚀?
“半兽人”在远古时期难道真实存在?那为什么世界各地都出现过?
抽血测怀孕几个小时出结果
5本主角冷静理智利己的小说,主角略带波澜的成长历程,值得一看
国产大片20年蝶变:从《不见不散》到《英雄》见证中国电影的崛起与辉煌
带有路径规划功能的无人船控制系统设计与实现
今日立春丨关于立春的风俗和禁忌,你知道多少?
血小板减少需要注意哪些事项
深度解读电影《解密》:家国下的抉择,梦境与人性的密码解析
热水器开24小时一天能花多少电?维修师傅坦言,许多人都做错了
外胚型体质是什么意思
UE和Unity的区别与联系
从亦舒的“独立女性”到95后成长之路,普通女性如何逆袭?
肾藏精,肝藏血,肺藏气,心藏神:中医藏象理论详解
如何将Web转换成Word:七种实用方法详解