from collections import defaultdict defget_divisors(n): divisors = defaultdict(int) if n % 2 == 0: while n % 2 == 0: divisors[2] += 1 n /= 2 i = 3 while i * i <= n: if n % i == 0: while n % i == 0: divisors[i] += 1 n /= i i += 2 if n > 1: divisors[n] += 1 return divisors
有了这个方法就可以用来求一些数的最小公倍数,例如求,2 3 5 8 的最小公倍数
1 2 3 4 5 6 7 8 9 10
L = [2, 3, 5, 8] factors = defaultdict(int) for i in L: divisors = get_divisors(i) for d in divisors.iterkeys(): factors[d] = max(factors[d], divisors[d]) res = 1 for d in factors.iterkeys(): res *= d ** factors[d] print res