Swift实现求最大公约数和最小公倍数

534 阅读1分钟

一、最大公约数

如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。

辗转相除法

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

swift代码实现

func greatestCommonDivisor(m: Int, n: Int) -> Int {
    var min = min(m, n)
    var max = max(m, n)
    var temp = 0
    while max%min != 0 {
        temp = max%min
        max = min
        min = temp
    }
    return min
}

二、最小公倍数

最小公倍数(Least Common Multiple,LCM),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。计算最小公倍数时,通常会借助最大公约数来辅助计算。

最小公倍数=两数的乘积/最大公约数

swift代码实现

func leastCommonMultiple(m: Int, n: Int) -> Int {
    return m*n/greatestCommonDivisor(m: m, n: n)
}