mirror of
https://github.com/correl/euler.git
synced 2024-11-27 11:09:54 +00:00
This commit is contained in:
parent
49d7955100
commit
7f8098ef77
3 changed files with 32 additions and 11 deletions
19
e007.py
19
e007.py
|
@ -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
12
e010.py
|
@ -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
12
e035.py
|
@ -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:
|
||||||
|
|
Loading…
Reference in a new issue