求N个数据的最大公约数和最小公倍数

gcd: greatest common divisor  最大公约数
lcm: least common multiplier  最小公倍数

如果是N=2的话,
求gcd:
loop:
if a > b:
   temp = a % b
   if temp == 0: 
       gcd = b
   a = b
   b = temp
else:
    ...

求lcm的话就是 a * b / gcd

当 N > 2时,需要递归,先求前2个数的gcd & lcm,然后把它和第3个再进行求,第4个...

数学分析,首先找出各个数的全部因子,gcd就是取这些因子中的公共部分,lcm就是因子的并集。
以8 10 12三个数分析:
8 = 2 * 2 * 2
10 = 2 * 5
12 = 2 * 2 * 3
gcd就是2, lcm就是2 * 2 * 2 * 5 * 3

求一个数的所有因子见我的另一篇blog。

PS:刚在网上看到证两个整数是否互质(互质就是两个整数只有共同因子1),就可以用gcd.
def gcd(m, n):
     if n== 0:
         return m;
      return gcd(n, m%n);

if gcd(m, n) ==1:
   print('relatively prime');

你可能感兴趣的:(数据)