Python:“最小公倍数和最大公约数的问题”

问题描述:求两个正整数的最大公约数和最小公倍数采用三种方法。求三个数的最大公约数和最 小公倍数。
思路:
1、辗转相除法:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现 的余数(第二余数)去除第一余数如此反复,直到最后余数是0为止。最后的除数为两 个数的最大公约数
2、相减法:用大数减去小数,将差值赋给大数,如此反复,直到两个数相等,即为最大公约数
3、穷举法:用一个中间数接收两个数中最大值,用这两个数对这个中间数求余,直到余数为0,不然中间数减一,重复操作。
我发现两个数的最小公倍数等于这两个数相乘除以它们的最大公约数以上是求两个数的最小公倍数和最大公约数
4、三个数的最大公约数:利用穷举法的思想求出,当然也可以选择其他方法
三个数的最小公倍数:找到这三个数中的最大值,然后用它与这三个数求余,直到余数为0,不然这个最大值从1开始与其
相乘,每次加1反复操作。
# _author:”YYX”
# date: 2018/9/5

# 辗转相除法
def fun1():
    a = input("请输入第一个数:")
    b = input("请输入第二个数:")
    if a.isdigit() and b.isdigit():
        a = int(a)
        x = a  # 用来接收a的初始值
        b = int(b)
        y = b  # 用来接收b的初始值
        if a < b:
            a, b = b, a
        c = 1
        while c != 0:
            c = a % b
            a = b
            b = c
        print("辗转相除法最大公约数为:", a)
        print("辗转相除法最小公倍数为:", (x*y//a))  # 最小公倍数 = 初始的两个数的乘积 / 最大公约数
    else:
        print("输入有误,请重新输入")
        fun1()


# 相减法
def fun2():
    a = input("请输入第一个数:")
    b = input("请输入第二个数:")
    if a.isdigit() and b.isdigit():
        a = int(a)
        x = a  # 用来接收a的初始值
        b = int(b)
        y = b  # 用来接收b的初始值
        while a != b:
            if a > b:
                a = a - b
            else:
                b = b - a
        print("相减法最大公约数为:", a)
        print("相减法最小公倍数为:", (x * y // a))  # 最小公倍数 = 初始的两个数的乘积 / 最大公约数
    else:
        print("输入有误,请重新输入")
        fun2()


# 穷举法
def fun3():
    a = input("请输入第一个数:")
    b = input("请输入第二个数:")
    if a.isdigit() and b.isdigit():
        a = int(a)
        x = a  # 用来接收a的初始值
        b = int(b)
        y = b  # 用来接收b的初始值
        if a > b:
            c = b
        else:
            c = a
        while b % c != 0 or a % c != 0:
            c -= 1
        print("穷举法最大公约数为:", c)
        print("穷举法最小公倍数为:", (x * y // c))  # 最小公倍数 = 初始的两个数的乘积 / 最大公约数
    else:
        print("输入有误,请重新输入")
        fun3()


# 三个整数的最大公约数和最小公倍数
def fun4():
    a = input("请输入第一个数:")
    b = input("请输入第二个数:")
    c = input("请输入第三个数:")
    if a.isdigit() and b.isdigit() and c.isdigit():
        a = int(a)
        x = a  # 用来接收a的初始值
        b = int(b)
        y = b  # 用来接收b的初始值
        c = int(c)
        z = c  # 用来接收c的初始值
        # 求三个数的最大公约数
        min = a
        if b < a:
            min = b
        if c < min:
            min = c
        while min > 1:

            if(a%min==0 and b%min==0 and c%min==0):
                break
            min -= 1
        print("三个数的最大公约数为:", min)
        # 求三个数的最小公倍数
        max = x
        if y > x:
            max = y
        if c > max:
            max = c
        i = 1
        while True:
            j = max*i
            if (j%x == 0 and j%y == 0 and j%z == 0):
                break
            i += 1
        print("三个数的最大公约数为:",j)

    else:
        print("输入有误,请重新输入")
        fun4()


# 展示结果
def result():
    while True:
        print("---------------")
        print("---1.相除法----")
        print("---2.相减法----")
        print("---3.穷举法----")
        print("---4.三个整数--")
        print("---5.退出  ----")
        print("---------------")
        num = input("请输入你想选择的算法:")
        if num.isdigit() and int(num) == 5:
            break
        if num.isdigit() and int(num) <= 4:
            switch = {'1': fun1, '2': fun2, '3': fun3,'4': fun4}
            switch.get(num, None)()  # 用字典带替别的语言中的switch,case语句
        else:
            print("没有此选项,请重新选择")
            result()
result()

总结:初次使用python,大家发现问题可以提示我一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值