from lib_prime import prime_factors_count from lib_misc import product def get_number_divisible(n): """ Returns the lowest number that is divisible by all numbers from 1 to n. We calculate the factors for all numbers and make sure that the minimum number for each factor is included in the solution. """ f = {} for i in range(2, n + 1): for prime, count in prime_factors_count(i).items(): try: f[prime] = max(f[prime], count) except KeyError: f[prime] = count n = product([prime**count for prime, count in f.items()]) return n assert(get_number_divisible(10) == 2520) def euler_005(): return get_number_divisible(20) assert(euler_005() == 232792560) print("e005.py: {}".format(euler_005()))