橙白oj:最大公约数与最小公倍数(python)

橙白oj:最大公约数和最小公倍数

下图为错误代码:

n=int(input())
while n:
    i,j=[int(x) for x in input().split()]
    if j>i:
        i,j=j,i
    c,d=i,j 
    while i%j:
        y=i%j
        j=y
        i=j
    print(j,int((c*d)/j))
    n=n-1

错误原因分析:

j=y
i=j

这两行代码的意思并不是我们所希望的将y的值赋给j,然后将j的初始值,就是y没有赋值给j之前的原本值再赋值给i,而是将y的值先赋给j,然后再赋给i,最后i和j都等于y,所以这是错误的

这个题给我的思维是 如果赋值时一定要注意赋给值的那几个变量之间的关系。
而这道题的最终答案也只是把这两行代码改一下变为 i,j=j,y 这样就达到我们的目的了,将y赋给j,j的初始值赋给i。

正确代码

n=int(input())
while n:
    i,j=[int(x) for x in input().split()]
    if j>i:
        i,j=j,i
    c,d=i,j 
    while i%j:
        y=i%j
        i,j=j,y
   print(j,int((c*d)/j))
   n=n-1

1.还有就是最大公约数怎么求

例如:
12和11的最大公约数
12/11=1 余数为1
11/1=1 余数为0
意思就是这两个数相除然后得一个余数,再让原式中得除数(也就是第一个式子中的11)与余数相除再得到一个余数,一直循环,直到这个余数为0为止,那么最后的 最大公约数 也就是当余数为0时的式子中的除数(也就是第二个式子中的1)

2.然后就是最小公倍数怎么求

这个就稍微简单些了,只要将最大公约数求出以后,用这两个数的乘积除以最大公约数就是最小公倍数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值