Python练习-求两个给定正整数的最大公约数和最小公倍数

题目描述

求两个给定正整数的最大公约数和最小公倍数

题目要求

  • 输入格式:输入在两行中分别输入正整数x和y
  • 输出格式:在一行中输出最大公约数和最小公倍数的值
  • 例如:输入100 1520 输出20 7600

题目解析

(1)几个整数中公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数

例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24,60)=12。

(2)几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数

例如:求6和15的最小公倍数。先分解质因数,得6=2×3,15=3×5,6和15的全部公有的质因数是3,6独有质因数是2,15独有的质因数是5,2×3×5=30,30里面包含6的全部质因数2和3,还包含了15的全部质因数3和5,且30是6和15的公倍数中最小的一个,所以[6,15]=30。

思路

(1)最大公约数
假设最大公约数为a,2个数为x和y,则x一定能够整除a,且y也能整除a,如24和60的最大公约数为24
求最大公约数时,最大公约数的范围是[1,最小值],故可以用x和y对从1开始的整数取余,若余数为0,则说明可以整除,保存该约数,直到取到最大约数,即为最大公约数

(2)最小公倍数

假设最小公倍数为b,2个数为x和y,作为x和y的公倍数,则b一定能够整除x和y,如6和15的最小公倍数为30
求最小公倍数时,最小公倍数的范围是[x和y的最大值,正无穷],故从x和y的最大值开始,对x和y取余,当第一个余数为0时,则此时的数即为x和y的最小公倍数

def hcf(x,y):  #定义最大公约数
    if x>y:
        smaller = y
    else:
        smaller = x  #先比较2个数的大小,将较小的数赋值给smaller
    for i in range(1,smaller + 1):  #给定i的范围,从1开始,smaller结束,range函数为左闭右开,故smaller要加1
        if((x%i == 0) and (y % i== 0)):  #如果x能够整除i  且 y也能整除i
            hcf = i  #将i赋值给hcf
    return hcf  # 循环结束后返回最大的i值,即是公约数
def lcm(x,y):       #定义最小公倍数
    if x>y:
        greater =x
    else:
        greater =y   #先比较2个数的大小,将较大的数赋值给greater
    while(True):
        if((greater%x==0) and (greater%y == 0)):  #如果greater能够整除x和y
            lcm =greater  # 则将greater赋值给lcm
            break  #跳出循环
        greater +=1   # greater=greater+1,重新开始循环
    return lcm
num1 = int(input("输入第一个数字:"))
num2 = int(input("输入第二个数字:"))
print("最大公约数为:",hcf(num1,num2),"最小公倍数为:",lcm(num1,num2))

运行结果:
在这里插入图片描述

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论

打赏作者

晓晓白的软件测试进阶之路

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值