【Python 百炼成钢】GCD与LCM

👾前言👾

因为博主最近比较忙所以好久没有进行更新,接下来几天会将基础算法更新完。
大家学习一个算法的时候,首先应该知道它是干啥的,然后理解其思路,最后再上手敲敲
因为算法这东西跟其他的还不一样,必须自己动手,否则看似自己会了,实际上差之千里。
刚开始看这两个名字你可能会觉得灰常的高大上,不明所以
其实GCD就是我们日常说到的最大公因数,LCM是我们日常说到的最小公倍数
你可能会问?为什么这么简单的题你还要将他拿出来说说呢?请带着疑问我们往下看。

🍁前置知识🍁

求最大公因数我们有两种方法:
辗转相除法(来自西方):辗转相除,直到余数为0,得到的除数就是最大公因数
更相减损术(来自中国老祖宗):更相减损,直到结果为0,得到的减数与被减数就是最大公因数
求最小公倍数的方法:
利用性质:a*b=gcd(a,b)*lcm(a,b)

在这里插入图片描述

🤺练习🤺

两个数的最大公因数


# 辗转相除法
def gcd(a,b):
    if a<b:
        a,b=b,a
    temp=b
    while temp:
        temp=a%b
        a=b
        b=temp
    return a
print(gcd(30,901))

# 更相减损术
def gcd(a,b):
    if a<b:
        a,b=b,a
    temp=b
    while a!=b:
        temp=a-b
        if temp>b:
            a=temp
        else:
            a=b
            b=temp
    return a
print(gcd(300,100))

两个数最大公倍数自己想想如何实现。

多个数的最大公因数


def gcd(a,b):
    if a<b:
        a,b=b,a
    temp=b
    while temp:
        temp=a%b
        a=b
        b=temp
    return a
def lsgcd(ls):
    n=len(ls)
    if n==1:
        return n
    elif n==2:
        return gcd(ls[0],ls[1])
    return gcd(lsgcd(ls[:n//2]),lsgcd(ls[n//2:]))

print(gcd(2,3))
print(lsgcd([15,6,9,21]))

多个数的最大公倍数


def lcm(a,b):
    ta=a
    tb=b
    if a<b:
        a,b=b,a
    temp=b
    while temp:
        temp=a%b
        a=b
        b=temp
    
    return (ta*tb)//a
def lslcm(ls):
    n=len(ls)
    if n==1:
        return n
    elif n==2:
        return lcm(ls[0],ls[1])
    return lcm(lslcm(ls[:n//2]),lslcm(ls[n//2:]))

print(lcm(2,3))
print(lslcm([15,6,9,21]))
print(lslcm([1,2,3,4]))

一日一步,以至千里。༼ つ ◕‿◕ ༽つ

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷尔。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值