Solve problem 357.
This commit is contained in:
41
python/e357.py
Normal file
41
python/e357.py
Normal 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
|
||||||
Reference in New Issue
Block a user