Rewrote #007 with a prime generator, updated #010 and #035 that depend on #007

This commit is contained in:
Correl Roush 2010-09-10 10:21:43 -04:00
parent 49d7955100
commit 7f8098ef77
3 changed files with 32 additions and 11 deletions

19
e007.py
View file

@ -26,6 +26,14 @@ def is_prime(n):
f = f + 6 f = f + 6
return True return True
def prime_generator():
i = 1
yield 2
while True:
i += 2
if is_prime(i):
yield i
def primes(max_count = 0, max_value = 0): def primes(max_count = 0, max_value = 0):
if not max_count and not max_value: if not max_count and not max_value:
raise Exception('There must be a constraint on how many primes to return!') raise Exception('There must be a constraint on how many primes to return!')
@ -39,8 +47,15 @@ def primes(max_count = 0, max_value = 0):
return primes return primes
def main(): def main():
print '6th Prime', primes(6)[-1] i = 0
print '10001st Prime', primes(10001)[-1] prime = 0
generator = prime_generator()
while i < 10000:
i += 1
prime = generator.next()
if i == 6:
print '6th Prime', prime
print '10001st Prime', prime
if __name__ == '__main__': if __name__ == '__main__':
main() main()

12
e010.py
View file

@ -4,12 +4,18 @@ The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million. Find the sum of all the primes below two million.
""" """
from e007 import primes; from e007 import prime_generator
def main(): def main():
print 'Fetching all primes for n < 2,000,000' print 'Fetching all primes for n < 2,000,000'
p = primes(0, 2000000) total = 0
print 'Sum:', sum(p) generator = prime_generator()
while True:
prime = generator.next()
if prime >= 2000000:
break
total += prime
print 'Sum:', total
if __name__ == '__main__': if __name__ == '__main__':
main() main()

12
e035.py
View file

@ -6,7 +6,7 @@ There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73
How many circular primes are there below one million? How many circular primes are there below one million?
""" """
from e007 import primes from e007 import is_prime, prime_generator
class NotCircular(Exception): class NotCircular(Exception):
pass pass
@ -30,10 +30,10 @@ def cyclic_rotation(n):
def main(): def main():
MAX = 1000000 MAX = 1000000
circular_primes = [] circular_primes = []
print 'Generating primes for p < {0}...'.format(MAX) print 'Searching for circular primes for p < {0}...'.format(MAX)
prime_list = primes(0, MAX) for prime in prime_generator():
print 'Searching for circular primes...' if prime >= MAX:
for prime in prime_list: break
try: try:
# Ensure the prime *can* be circular # Ensure the prime *can* be circular
if prime > 9: if prime > 9:
@ -41,7 +41,7 @@ def main():
raise NotCircular() raise NotCircular()
# Check all permutations # Check all permutations
for rotation in cyclic_rotation(prime): for rotation in cyclic_rotation(prime):
if rotation not in prime_list: if not is_prime(rotation):
raise NotCircular() raise NotCircular()
circular_primes.append(prime) circular_primes.append(prime)
except NotCircular: except NotCircular: