Solve problem 357.

main
felixm 2024-04-21 10:11:40 -04:00
parent 5c8b4b1de7
commit 0e82dac7ca
1 changed files with 41 additions and 0 deletions

41
python/e357.py Normal file
View File

@ -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