题目:辗转相除法(求最大公约数)
题目链接:LeetCode-1979. 找出数组的最大公约数

思路分析:辗转相除法(也叫欧几里得算法)gcd(a,b) = gcd(b,a mod b)
辗转相除法其核心部分为:若r 是a ÷ b的余数,则 gcd(a, b)=gcd(b, r)
复杂度:时间复杂度 O ( n + l o g ( m a x ) ) O(n+log(max)) O(n+log(max))、空间复杂度 O ( 1 ) O(1) O(1)
Go代码
func findGCD(nums []int) int {
max, min := getMaxMin(nums)
return getGcd(max, min)
}
// gcd求最大公约数
func getGcd(a int, b int) int {
yu := 0
for b != 0 {
yu = a % b //得到余数
a = b //根据辗转相除法,把被除数赋给除数
b = yu //余数赋给被除数
}
return a //返回除数
}
func getMaxMin(nums []int) (max int, min int) {
max, min = nums[0], nums[0]
length := len(nums)
for i:=1; i<length; i++ {
if nums[i] > max {
max = nums[i]
}
if nums[i

本文介绍了辗转相除法求最大公约数的原理、欧几里得算法,以及如何用Go语言实现。同时涵盖了素数判断的思路、6K+1/-1规则,埃氏筛法的应用,以及丑数的判定,分析了各自的时间和空间复杂度。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



