Project Euler 35「巡回素数」とほぼ同じ。
Problem 37 「切り詰め可能素数」
3797は面白い性質を持っている. まずそれ自身が素数であり, 左から右に桁を除いたときに全て素数になっている (3797, 797, 97, 7). 同様に右から左に桁を除いたときも全て素数である (3797, 379, 37, 3).
右から切り詰めても左から切り詰めても素数になるような素数は11個しかない. 総和を求めよ.
注: 2, 3, 5, 7を切り詰め可能な素数とは考えない.
def hoge():
ignore_digits = set('024568')
ans = []
n = 11
while len(ans) < 11:
str_n = str(n)
if len(str_n) > 2 and ignore_digits & set(str_n):
n += 2
continue
flg = True
for i in range(len(str_n)):
if not is_prime(int(str_n[i:])) or not is_prime(int(str_n[:i+1])):
flg = False
break
if flg == True:
ans.append(n)
n += 2
return sum(ans)
import math
def is_prime(n): # 素数判定
if n < 2: return False
elif n == 2: return True
elif n % 2 == 0: return False
for i in range(3, int(math.sqrt(n))+1, 2):
if n % i == 0: return False
return True
print(hoge())