问题描述:

求任意3个整数的最小公倍数。


我的代码:

def GCD(m, n):
    if n > m: m, n = n, m
    while True:
        m, n = n, m % n
        if n == 0: break
    return m
m=int(raw_input("please input the first number: "))
n=int(raw_input("please input the second number: "))
p=int(raw_input("please input the third number: "))

gcd1=GCD(m,n)
lcm1=m*n/gcd1

gcd2=GCD(lcm1,p)
lcm2=lcm1*p/gcd2

print "%d and %d and %d Least common multiple is: %d" % (m,n,p,lcm2)


我的思路:

求最小公倍数有多种方法如分解质因数法,公式法等,想来想去还是觉得公式法简单点,上一次做了最大公约数,直接拿过来用,而公式法就是最小公倍数=两数成绩/其最大公约数,所以先求两个数的最小公倍数,再求该最小公倍数和第三个数的最小公倍数;



示例代码:

a, b= (input() for i in range(3))
if b > a: a, b = b, a
if c > a: a, c = c, a
ans = a
while ans % b or ans % c:
   ans += a
print ans


代码分析:

代码的两个if语句是将三个数中的最大值给a,我觉得可以直接使用a=max(a,b,c)替代,获取最大值是为了让其对较小的数进行除取余操作。代码的核心就是while ans % b or ans % c这一句,它是求b和c的公倍数的;

举例说明吧:

先算a%b

ans        a        b           ans%b

20         20       3          20%3=2

40         20       3          40%3=1

60         20       3          60%3=0

然后再算a%c

20         20       18         20%18=2

40         20       18         40%18=4

60         20       18         60%18=6

80         20       18         80%18=8

100        20       18         100%18=10

120        20       18         120%18=12

140        20       18         140%18=14

160        20       18         160%18=16

180        20       18         180%18=0


那么a%c or a%b就是180了;



题目出处:http://www.cheemoedu.com/exercise/37