python3实现求两个正整数的最大公约数和最小公倍数


版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/dcjmessi/article/details/82531926
因为最小公倍数=输入的两个数之积除以他们的最大公约数,所以关键是求最大公约数。

# _*_ coding: utf-8 _*_
# 作者:dcjmessi
# 日期:2018/9/5


# 遍历法
def Traverse(m, n):
    # 比较大小,并让m为较大值
    if m < n:
        m, n = n, m
    # 遍历最小值n来计算出最大公约数max
    for i in range(2, n + 1):
        if (n % i == 0 and m % i == 0):
            max = i
    # 计算最小公倍数
    tiple = m * n
    a = tiple / max
    print("遍历法最大公约数  "+str(max))
    print("遍历法最小公倍数  "+str(a))


# 辗转相除法
def Division_algorithm(m, n):
    tiple = m * n
    # 比较大小并求余
    if m > n:
        remainder = m % n
        # 当余数不为零时,赋值求余,当余数为零时,n为最大公约数
        while (remainder != 0):
            m = n
            n = remainder
            remainder = m % n
    else:
        remainder = n % m
        while (remainder != 0):
            n = remainder
            remainder = m % n
            m = n
    # 计算最小公倍数
    min = tiple / n
    print("辗转相除法最大公约数  "+str(n))
    print("辗转相除法最小公倍数  "+str(min))


# 更相减损法
def More_loss(m, n):
    i = 0
    tiple = m * n
    # 判断它们是否都是偶数。若是,则用2约简,并记录约简的次数
    while (m % 2 == 0 and n % 2 == 0):
        m = m / 2
        n = n / 2
        i += 1
    # 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。直到所得的减数和差相等为止
    if m > n:
        difference = m - n
        while (difference != n):
            m = max(difference, n)
            n = min(difference, n)
            difference = m - n
    else:
        difference = n - m
        while (difference == m):
            n = max(difference, m)
            m = min(difference, m)
            difference = n - m
    # 最大公约数为约掉的若干个2与difference的乘积
    b = difference * i * 2
    # 计算最小公倍数
    a = tiple / b
    print("更相减损法最大公约数  "+str(b))
    print("更相减损法最小公倍数  "+str(a))

if __name__=="__main__":
    m = int(input('m:\n'))
    n = int(input('n:\n'))
    Traverse(m,n)
    Division_algorithm(m,n)
    More_loss(m,n)
  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dcjmessi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值