Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from primefac import primefac
- from itertools import combinations
- from operator import mul
- def sum_divisible_by_p(p, start, limit):
- stop = int((limit-1)/float(p))
- return p*(stop+start)*(stop-start+1)/2
- def sum_divisible_fast(divisors, start, stop):
- proper_divisors = []
- for div in divisors:
- proper_divisors.extend(list(primefac(div)))
- divisors = list(set(proper_divisors))
- total = 0
- for divisor in divisors:
- total += sum_divisible_by_p(divisor, start, stop)
- for i in range(2, len(divisors)+1):
- k = (-1)**(i-1)
- for perm in combinations(divisors, i):
- product = reduce(mul, list(perm))
- total += k*sum_divisible_by_p(product, start, stop)
- return int(total)
- def sum_divisible(divisors=[3, 5], start=0, stop=100):
- count = 0
- for num in xrange(start, stop):
- for d in divisors:
- if num % d == 0:
- count += num
- break
- return count
- if __name__ == "__main__":
- print sum_divisible([3, 5, 7, 13], 1, 100000)
- print sum_divisible_fast([3, 5, 7, 13], 1, 100000)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement