求最小公倍数与最大公因数(多数之间 待优化)

596 阅读1分钟

1. 如果是两个数之间的关系

只有两个数:最小公倍数 = 两数之积/最大公约数

def gcd(d1, d2):
    # 获取最大公约数--碾转相除法
    r = d1 % d2
    if r:
        return gcd(d2, r)
    return d2


if __name__ == '__main__':
    print(gcd(15, 20))
    # 最小公倍数
    print(15 * 20 / gcd(15, 20))

2. 多个数之间的最小公倍数与最大公约数

2.1 最大公约数流程

image.png

a = [100, 1000, 60, 30]


def greatest_common_divisor(arr):
    arr = sorted(arr)
    first_num = arr[0]
    while True:
        result = True
        for i in arr:
            if i % first_num != 0:
                result = False
                break
        if result:
            return first_num
        else:
            first_num -= 1


if __name__ == '__main__':
    print(greatest_common_divisor(a))
    
############################################
import math

a = [15, 18, 21]


def gcdm(arr):
    gcd = math.gcd(arr[0], arr[1])
    for i in range(1, len(arr) - 1):
        gcd = math.gcd(arr[i], arr[i + 1])
    return gcd


if __name__ == '__main__':
    print(gcdm(a))

2.2 最小公倍数流程

image.png

a = [100, 1000, 60, 30]


def least_common_multiple(arr):
    arr = sorted(arr)
    max_num = arr[-1]
    while True:
        result = True
        for i in arr:
            if max_num % i != 0:
                result = False
                break
        if result:
            return max_num
        else:
            max_num += 1


if __name__ == '__main__':
    print(least_common_multiple(a))