Moved 20 to 26 to Python.

This commit is contained in:
2019-07-15 22:11:49 -04:00
parent 0ab214633e
commit f76b36c8d3
10 changed files with 194 additions and 174 deletions

View File

@@ -1,38 +1,31 @@
def primes(n):
""" Nice way to calculate primes. Should be fast. """
l = range(2, n + 1)
_l = []
while True:
p = l[0]
if p * p > n:
return _l + l
l = [i for i in l if i % p != 0]
_l.append(p)
from itertools import count
def produce_prime(a, b, n, primes):
x = n*n + a*n + b
return x in primes
def get_cycle_count(nominator, denominator):
assert(nominator == 1)
remainders = {}
remainder = nominator
results = []
for i in count():
result = remainder // denominator
remainder = remainder % denominator
results.append(result)
if remainder in remainders:
return i - remainders[remainder]
else:
remainders[remainder] = i
if remainder == 0:
return 0
remainder *= 10
def f_027():
""" n^2 + a*n + b
1) b must be prime
"""
p6 = set(primes(1000000))
p3 = primes(1000)
options = [(a, b)
for a in range(1, 1000, 2)
for b in p3]
print(len(options))
for n in range(100):
options = [(a, b)
for a, b in options
if produce_prime(a, b, n, p6)]
print(options)
print(len(options))
def euler_026():
return max([(get_cycle_count(1, i), i) for i in range(1, 1000)])[1]
f_027()
if __name__ == "__main__":
assert(get_cycle_count(1, 7) == 6)
assert(get_cycle_count(1, 10) == 0)
assert(get_cycle_count(1, 6) == 1)
print("e026.py: {}".format(euler_026()))
assert(euler_026() == 983)