最大公约数简介
最大公约数(GCD/Greatest Common Divisor)指几个整数中共有约数中最大的一个
欧几里德算法
欧几里德算法又称辗转相除法, 该算法用于计算两个整数的最大公约数. 定理如下:
1 | gcd(a,b) = gcd(b,a mod b) |
意思就是说: a
和b
的最大公约数 = b
和a➗b的余数
的最大公约数
- 当
a➗b的余数
为0时, 最大公约数为b - 当
a➗b的余数
不为0时, 则将a=b
,b=a➗b的余数
, 递归运算, 直到余数为0
具体证明的过程在此不再赘述, 如有兴趣可以自行谷歌一下, 下面直接给出基于go语言的实现代码
1 | package main |
运行结果:
1 | 5 |
解析:
第一次调用:
调用gcd(5, 10)
则a=5, b=10
, 进入函数后判断if b == 0
, 此时b=10
, 判断条件为假, 递归调用gcd(b, a % b)
, 此时实际值为 gcd(10, 5 % 10)
, 5与10计算取余
商0, 余5, 则实际调用参数为gcd(10, 5)
第二次调用:
调用gcd(10, 5)
则a=10, b=5
, 进入函数后判断if b == 0
, 此时b=5
, 判断条件为假, 递归调用gcd(b, a % b)
, 此时实际值为 gcd(5, 10 % 5)
, 10与5计算取余
商2, 余0, 则实际调用参数为gcd(5, 0)
第三次调用:
调用gcd(5, 0)
则a=5, b=0
, 进入函数后判断if b == 0
, 此时b=0
, 判断条件为真, 直接返回a
此时a
即为两个数的最大公约数
多个数求最大公约数
实现思路: 先求出头两个数的最大公约数, 再拿计算出的最大公约数依次与后面所有的数求最大公约数
1 | package main |
运行结果:
1 | 第1次运算, 当前最大公约数为4, 与4运算得出的新最大公约数为: 4 |