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


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

    说到最大公因(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))
  • 相关阅读:
    error:undefined reference to 'net_message_processor::net_message_processor()'
    android 网络检测
    eclipse 安装 ndk 组件
    eclipse下编译cocos2dx 3.0
    Cocos2dx3.0 TextField 输入中文的问题
    记录与骗子进行的一次交锋. 与技术无关
    关于继承的设计
    kubernetes1.5.2--部署dashboard服务
    kubernetes1.5.2--部署DNS服务
    kubernetes1.5.2集群部署过程--安全模式
  • 原文地址:https://www.cnblogs.com/canaan233/p/13723516.html
Copyright © 2020-2023  润新知