#!/usr/bin/env python
import timeit
from functools import partial, reduce
def gcd(a, b):
"""Greatest common divisor (factor)."""
while b: # Euclid's algorithm
a, b = b, a % b
return a
def lcm(*args):
"""Least common multiple."""
# lcm(a, b, c) == lcm(lcm(a, b), c)
return reduce(lambda a, b: a * b // gcd(a, b), args)
def f(n):
"""Smallest positive number evenly divisible by all numbers from 1
to n including.
"""
return lcm(*range(1, n + 1))
print(f(10)) # -> 2520
print(f(50)) # -> 3099044504245996706400
def measure():
for n in [10, 50, 100]:
print("%3d: %5.2f microseconds" % (n, 100*timeit.timeit(partial(f, n),
number=1000*10)))
measure()
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCmltcG9ydCB0aW1laXQKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwsIHJlZHVjZQoKZGVmIGdjZChhLCBiKToKICAgICIiIkdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIChmYWN0b3IpLiIiIgogICAgd2hpbGUgYjogIyBFdWNsaWQncyBhbGdvcml0aG0KICAgICAgICBhLCBiID0gYiwgYSAlIGIKICAgIHJldHVybiBhCgpkZWYgbGNtKCphcmdzKToKICAgICIiIkxlYXN0IGNvbW1vbiBtdWx0aXBsZS4iIiIKICAgICMgbGNtKGEsIGIsIGMpID09IGxjbShsY20oYSwgYiksIGMpCiAgICByZXR1cm4gcmVkdWNlKGxhbWJkYSBhLCBiOiBhICogYiAvLyBnY2QoYSwgYiksIGFyZ3MpCgpkZWYgZihuKToKICAgICIiIlNtYWxsZXN0IHBvc2l0aXZlIG51bWJlciBldmVubHkgZGl2aXNpYmxlIGJ5IGFsbCBudW1iZXJzIGZyb20gMQogICAgICAgdG8gbiBpbmNsdWRpbmcuCiAgICAiIiIKICAgIHJldHVybiBsY20oKnJhbmdlKDEsIG4gKyAxKSkKCnByaW50KGYoMTApKSAjIC0+IDI1MjAKcHJpbnQoZig1MCkpICMgLT4gMzA5OTA0NDUwNDI0NTk5NjcwNjQwMAoKZGVmIG1lYXN1cmUoKToKICAgIGZvciBuIGluIFsxMCwgNTAsIDEwMF06CiAgICAgICAgcHJpbnQoIiUzZDogJTUuMmYgbWljcm9zZWNvbmRzIiAlIChuLCAxMDAqdGltZWl0LnRpbWVpdChwYXJ0aWFsKGYsIG4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcj0xMDAwKjEwKSkpCm1lYXN1cmUoKQo=