LoginSignup
2
1

More than 5 years have passed since last update.

Project Euler 37「切り詰め可能素数」

Posted at

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())
2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1