从原理到实践:详解辗转相除法(欧几里得算法)
创作时间:
作者:
@小白创作中心
从原理到实践:详解辗转相除法(欧几里得算法)
引用
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进行递归计算。
总结
辗转相除法是一个简单而优雅的算法,通过递归或循环都能很好地实现。它不仅在数学中有广泛应用,在计算机科学中也是基础算法之一。理解其原理和实现方法,对于提升算法思维大有裨益。
热门推荐
南瓜奶昔到黑芝麻糊:7款破壁机早餐食谱助你暖身养生
破壁机健康饮用指南:选购、使用与食谱全攻略
低GI、高营养:青稞麦片引领早餐革命
破壁机变身美容神器:4款养颜饮品轻松在家做
头晕背后藏风险,老年人应警惕脑血管病变
15%头晕患者病因在心理,焦虑抑郁是主因
头晕三大病因全解析:耳石症、梅尼埃病与体位性低血压
大报恩寺遗址博物馆:数字化创新让千年古刹焕发新生
莆田东岩山:千年古塔与妈祖行宫的免费文化之旅
福建莆田东山报恩寺塔:北宋建筑的抗震奇迹
一盆白醋加花露水,轻松去除室内烟味
川渝“耙耳朵”:既是疼妻丈夫,又是旧时三轮
智能光伏路灯崛起:市场规模四年增15%,成智慧城市新宠
太阳能路灯智能化:TPS61165与AT89S52的高效协作
AT89C52让太阳能路灯更智能:从充电到照明的全面控制
智能路灯搭载STM32,实现环境监测与远程管理
专家解析:儿童饮用羊奶的营养优势与注意事项
挂靠车辆怎样进行合规过户?过户过程中需要注意哪些问题?
车辆牌照能过户给别人吗
英国工业革命:一场改变欧洲经济格局的技术革命
工业革命带来的环境灾难:污染、资源耗竭与生态破坏
美国圣诞树文化:从宗教符号到全民节日传统
乙女游戏精选:五款日式恋爱手游的沉浸式体验
2024必玩:Steam平台十大女性向剧情游戏推荐
央企59股破净,国资委出台市值管理新政
央企市值管理新政出台,中国神华以高股息策略获市场青睐
MPPT算法加持,太阳能路灯实现智能高效照明
如何挑选优质鲍鱼?六大标准助你选购上乘美味
中国十大鲍鱼产地排行榜:从大连皱纹盘鲍到平潭鲍鱼
民俗体验、消费优惠、烟花晚会……今年春节来四川打卡热闹中国年