LoginSignup
2
1

More than 5 years have passed since last update.

Project Euler 49「素数数列」

Posted at

2つ前の激遅コードを自分なりに高速化しようと試みるもパクり以外に思いつかない。
なので気分転換に先へ進む。
もうちょっと成長したら再トライしようと思う。(多分しない)

Problem 49 「素数数列」

項差3330の等差数列1487, 4817, 8147は次の2つの変わった性質を持つ.

(i)3つの項はそれぞれ素数である.
(ii)各項は他の項の置換で表される.
1, 2, 3桁の素数にはこのような性質を持った数列は存在しないが, 4桁の増加列にはもう1つ存在する.

それではこの数列の3つの項を連結した12桁の数を求めよ.

def hoge():
    f = lambda n: sorted(list(str(n)))
    for n in range(1000, 3340): # 10000 - 6660 = 3340
        if n == 1487: continue # 問の例はスキップ
        N = [ n + 3330 * i for i in range(3) ]
        if all( is_prime(m) for m in N ) and \
           f(N[0]) == f(N[1]) == f(N[2]):
            return ''.join( str(m) for m in N )

def is_prime(n):
    if n < 2: return False
    if n == 2: return True
    if n % 2 == 0: return False
    return all(n % i != 0 for i in range(3, int(n ** 0.5) + 1, 2))

print(hoge())
2
1
0

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