From 0e82dac7ca8afa5453a10f452cd0e9753657b1e2 Mon Sep 17 00:00:00 2001 From: felixm Date: Sun, 21 Apr 2024 10:11:40 -0400 Subject: [PATCH] Solve problem 357. --- python/e357.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 python/e357.py diff --git a/python/e357.py b/python/e357.py new file mode 100644 index 0000000..0dfe6c5 --- /dev/null +++ b/python/e357.py @@ -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