Thursday, July 24, 2014
Finally, it gets interesting. Below is my third attempt on this problem, the first taking so long to complete that I improved it before its first iteration, and the second just wasn’t good enough.
def find_primes(number):
"""Returns a set of primes"""
primes = set()
if number != int(number):
raise Exception('Must be int') # Improve this
if number < 4:
return primes
i = 2
while number > 1:
while number % i == 0:
number = number / i
primes.add(i)
i += 1
return primes
In this solution, I learned some basic uses for python’s set builtin. I’m a better person today.
Another straightforward challenge: find the sum of all even numbers in the Fibonacci sequence less than four million.
def even_fib_sum(limit = 10):
num = 2
pre = 1
tot = 2
while num < limit:
num += pre
pre = num - pre
if num % 2 == 0:
tot += num
return tot
Yeah, yawn.
So I’ve been trying to improve my coding technique while thinking about some fun math problems, and Project Euler will help me achieve exactly that. It’s unfortunate that they were hacked recent, so a lot of their functionality has been removed, but it will still confirm your answer.
My rules for these challenges:
- Searching Google for answers or algorithms is not allowed.
- Searching Google for builtin language libraries is allowed.
- After a solution is found, the first rule can be ignored (provided advance knowledge of future challenges is not present).
Anyway, below is Challenge #1 by me. This was pretty straightforward and brute-force, but it works. The only interesting thing I’m doing here is playing with the flexible definitions of True/False.
def euler1(n=1000):
"""Returns the sum of all numbers that possess either three or five as factors."""
for i in range(n):
if not ((i % 3) * (i % 5)):
s += i
return s