Python Solutions to Project Euler.
Index
Contents
- Solutions to the first 40 problems in functional Python
- Problem 1: Add all the natural numbers below 1000 that are multiples of 3 or 5.
- Problem 2: Find the sum of all the even-valued terms in the Fibonacci sequence which do not exceed one million.
- Problem 3: Find the largest prime factor of 317584931803.
Solutions to the first 40 problems in functional Python
Just found this site which is apparently devoted to solutions for the Euler problem set, in python, with a functional flavor.
Problem 1: Add all the natural numbers below 1000 that are multiples of 3 or 5.
http://projecteuler.net/index.php?section=problems&id=1
def multiples_of_3_or_5(): for number in xrange(1000): if not number % 3 or not number % 5: yield number print sum(multiples_of_3_or_5())
In one line:
print sum( number for number in xrange(1000) if not (number % 3 and number % 5) )
Problem 2: Find the sum of all the even-valued terms in the Fibonacci sequence which do not exceed one million.
http://projecteuler.net/index.php?section=problems&id=2
def fib(): x,y = 0,1 while True: yield x x,y = y, x+y def even(seq): for number in seq: if not number % 2: yield number def under_a_million(seq): for number in seq: if number > 1000000: break yield number print sum(even(under_a_million(fib())))
Alternately:
import itertools def fib(): x,y = 0,1 while True: yield x x,y = y, x+y print sum(x for x in itertools.takewhile(lambda x: x <= 1000000, fib()) if x % 2 == 0)
Problem 3: Find the largest prime factor of 317584931803.
http://projecteuler.net/index.php?section=problems&id=3
plist = [2] def primes(min, max): if 2 >= min: yield 2 for i in range(3, max, 2): for p in plist: if i%p == 0 or p*p > i: break if i%p: plist.append(i) if i >= min: yield i def factors(number): for prime in primes(2, number): if number % prime == 0: number /= prime yield prime if number == 1: break print max(factors(317584931803))