26# Greatest Common Divisor占位符

文章目录

问题描述

通过欧几里得算法可以求余数,a和b的公约数GCD是两者都可以被除的最大整数,例如gcd(20, 35) = 5 ,gcd(13, 28) = 1。欧几里得算法非常简单 - 我们继续从较大的值中减去(a和b)较小的值 - 并重复此操作直到值变为相等 - 最后一个值将是gcd。 为了加快处理速度,我们可以使用模运算而不是减法运算。例如

20      35      - subtract first from second
20      15      - subtract second from first
5       15      - now subtract first from second twice
5       5       - and here is GCD

和b的最小公倍数(或LCM)是这样的整数d,它可以被它们两者整除(并且是所有可能的中最小的)。 它可以通过以下规则找到:

lcm(a, b) = a * b / gcd(a, b)

输入数据包含第一行中的测试用例数。
然后是包含测试用例的行,每行包含两个数字 - 用于A和B.
答案应包含每对的GCD和LCM,用括号括起并用空格分隔,例如:

input data:
2
2 3
4 10

answer:
(1 6) (2 20)

代码

numInput=int(input())
for i in range(numInput):
    line=list(map(int,input().split()))
    a=line[0]
    b=line[1]
    while a != b:
        if a>b:
             a=a-b
        else:
             b=b-a
    gcd=a
    Icm=round(line[0]*line[1]/gcd)
    #print("("+str(gcd)+" "+str(Icm)+")",end=" ")
    print('({} {})'.format(gcd,Icm),end=" ")

练习了下占位符这个方法是用相减直至相等来求公约数

def gcd_lcm(lst):
    a, b = a2, b2 = list(map(int, lst.split()))
    while a!=0 and b!=0:
        if a > b:
            a %= b
        else:
            b %= a
    return '({} {})'.format(a + b, int(a2 * b2 / (a + b)))
    
print(' '.join(gcd_lcm(input()) for i in range(int(input()))))

通过两数求余,直至一个数为0为止,比较有学习价值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值