Optimized prime finding

git-svn-id: file:///srv/svn/euler@30 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
This commit is contained in:
Correl Roush 2010-04-12 15:53:09 +00:00
parent 715e24dcf3
commit 9e2d5b6101

40
007.py
View file

@ -1,15 +1,35 @@
def primes(limit):
import math
def is_prime(n):
if n == 1:
return False
if n < 4:
return True
if n % 2 == 0:
return False
if n < 9:
return True
if n % 3 == 0:
return False
r = math.floor(math.sqrt(n))
f = 5
while f <= r:
if (n % f == 0) or (n % (f + 2) == 0):
return False
f = f + 6
return True
def primes(max_count = 0, max_value = 0):
if not max_count and not max_value:
raise Exception('There must be a constraint on how many primes to return!')
primes = [2]
i = 3
while len(primes) < limit:
is_prime = True
for p in primes:
if i % p == 0:
is_prime = False
break
if is_prime:
primes.append(i)
i = 1
while (not max_count or len(primes) < max_count) \
and (not max_value or i < max_value):
i = i + 2
if is_prime(i):
primes.append(i)
return primes
if __name__ == '__main__':