Moved 20 to 26 to Python.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user