From 9e2d5b610147415c99f25fe4ff0cea2b1a832706 Mon Sep 17 00:00:00 2001 From: Correl Roush Date: Mon, 12 Apr 2010 15:53:09 +0000 Subject: [PATCH] Optimized prime finding git-svn-id: file:///srv/svn/euler@30 e5f4c3ec-3c0c-11df-b522-21efaa4426b5 --- 007.py | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/007.py b/007.py index 0af7cd4..c3724e8 100644 --- a/007.py +++ b/007.py @@ -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__':