Dumb solution is quick enough so me do dumb solution

This commit is contained in:
2021-02-25 23:37:52 +01:00
parent 2726c2d2ca
commit 8eab5128a1

53
37/main.py Normal file
View File

@@ -0,0 +1,53 @@
'''
The number 3797 has an interesting property. Being prime itself, it is possible to continuously remove digits from left to right, and remain prime at each stage: 3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3.
Find the sum of the only eleven primes that are both truncatable from left to right and right to left.
Note: 2, 3, 5, and 7 are not considered to be truncatable primes.
'''
import math
import numpy as np
def sieve(n):
assert n > 1
ns = [True] * n
for i in range(2, math.ceil(np.sqrt(n))):
if ns[i]:
j = pow(i, 2)
while j < n:
ns[j] = False
j = j + i
return [i for i,val in enumerate(ns) if val][2:]
def isTruncable(n, primes):
s = str(n)
for i in range(len(s)):
if int(s[:i+1]) not in primes or int(s[i:]) not in primes:
return False
return True
def main():
print("Hello this is Patrick")
primes = set(sieve(10000000))
truncs = []
i = 11
while len(truncs) < 11:
if isTruncable(i, primes):
truncs.append(i)
print(truncs)
i += 2
print(f"Trunc sum: {sum(truncs)}")
if __name__ == "__main__":
main()