Solve problem 357.
parent
5c8b4b1de7
commit
0e82dac7ca
|
@ -0,0 +1,41 @@
|
|||
def primes_sieve(nmax):
|
||||
a = [0 for _ in range(nmax)]
|
||||
for i in range(2, nmax):
|
||||
if a[i] == 0:
|
||||
for j in range(i + i, nmax, i):
|
||||
a[j] = i
|
||||
return a
|
||||
|
||||
|
||||
def is_number(n, primes):
|
||||
f = n // 2
|
||||
if primes[f] == 0:
|
||||
for d in [2, f]:
|
||||
if primes[d + n // d] != 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
for d in range(1, n // 2 + 1):
|
||||
if n % d == 0:
|
||||
if primes[d + n // d] != 0:
|
||||
return False
|
||||
if d * d > n:
|
||||
break
|
||||
return True
|
||||
|
||||
|
||||
def euler_357():
|
||||
r = 1 # n = 1 is a number
|
||||
ps = primes_sieve(100_000_000)
|
||||
for p in range(3, len(ps)):
|
||||
if ps[p] == 0:
|
||||
n = p - 1
|
||||
if is_number(n, ps):
|
||||
r += n
|
||||
return r
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
solution = euler_357()
|
||||
print("e357.py: " + str(solution))
|
||||
assert solution == 1739023853137
|
Loading…
Reference in New Issue