def solve(): sieve(12000) cache = [0,0,0,0] + [None] * 12001 qty = 0 for d in xrange(4, 12001): cache[d] = twixtQty(d) - sum(cache[div] for div in divisors(d) if div != d) qty += cache[d] return qty
def solve(): sieve(10**6) mdrs = [None] * 10**6 mdrs[0] = 0 # to emulate the omission of 1 from factorizations accum = 0 for n in xrange(2, 10**6): val = max(droot(d) + mdrs[n // d - 1] for d in divisors(n) if d != 1) accum += val mdrs[n-1] = val return accum
def test_divisors_1(self): d = eulerlib.divisors(1) assert d == [1], 'Divisors should be 1'
def test_divisors_0(self): d = eulerlib.divisors(0) assert d == []
def test_divisors_1001(self): d = eulerlib.divisors(1001) assert d == [1, 7, 11, 13, 77, 91, 143, 1001]
def test_divisors_17(self): d = eulerlib.divisors(17) assert d == [1, 17], 'Divisors should be 1 and 17.'
def test_divisors_neg10(self): d = eulerlib.divisors(-10) assert d == [1, 2, 5, 10], 'Divisors should be 1, 2, 5, 10'