• 最小公倍数和最大公因数


    等我学完数论我就来填坑!!

    说到最大公因(gcd)),我们就不得不提辗转相除法,本身也是一种递归的方式,假设求a和b的最大公因数,那么基本步骤为:

    r = a % b

    a = b

    b = r

    直到余数为0(b=0)时,此时的a就是a和b的最大公因数

    代码为:

    def gcb(a, b):
        if b == 0:
            return a
        else:
            return gcb(b, a % b)
    
    
    if __name__ == "__main__":
        a = 4
        b = 5
        print(gcb(a, b))

    如果是判断一个列表的最大公因数,那我们在构造最大公因数之后,可以再构造一个递归的函数,基本的思想为:只要得出第[n-1]数和前面n-2个数的最大公因数就可以了

    def gcb(a, b):
        if b == 0:
            return a
        else:
            return gcb(b, a % b)
    
    
    def gcd_nums(nums):
        n = len(nums)
        if not nums:
            return 0
        if n == 1:
            return nums[0]
        else:
            return gcb(nums[n - 1], gcd_nums(nums[:n - 1]))
        
    if __name__ == "__main__":
        numbers = [11, 66, 88, -99, 0]
        print(gcd_nums(numbers))

    在最大公因数的基础上,我们可以得到最小公倍数(lcm),有一个公式:

    lcm  = (a * b) / gcd(a, b)

    def gcd(a, b):
        if b == 0:
            return a
        else:
            return gcd(b, a % b)
    
    
    def gcd_nums(nums):
        n = len(nums)
        if not nums:
            return -1
        if n == 1:
            return nums[0]
        else:
            return gcd(nums[n - 1], gcd_nums(nums[:n - 1]))
    
    # 递归的求解一组数的最大公倍数
    def lcm_nums(nums):
        n = len(nums)
        if not nums:
            return -1
        if n == 1:
            return nums[0]
        else:
            return lcm(nums[n - 1], lcm_nums(nums[:n - 1]))
    
    def lcm(a, b):
        return (a * b) // gcd(a, b)
    
    
    if __name__ == "__main__":
        numbers = [11, 66, 88, -99, 0]
        print(gcd_nums(numbers))
        print(lcm_nums(numbers))
  • 相关阅读:
    [破解]java打包Exe工具
    weblogic:local class incompatible: stream classdesc serialVersionUID
    funny alphabet
    Apache Thrift
    nginx 学习笔记(9) 配置HTTPS服务器--转载
    nginx学习笔记(8)虚拟主机名---转载
    nginx学习笔记(7)Nginx如何处理一个请求---转载
    nginx 学习笔记(6) nginx配置文件中的度量单位
    nginx 学习笔记(5) nginx调试日志
    nginx 学习笔记(4) Connection处理方法
  • 原文地址:https://www.cnblogs.com/canaan233/p/13723516.html
Copyright © 2020-2023  润新知