LoginSignup
2
1

More than 5 years have passed since last update.

Project Euler 41「パンデジタル素数」

Posted at

itertoolsとも仲良くしていきたいですね。

Problem 41 「パンデジタル素数」

n桁パンデジタルであるとは, 1からnまでの数を各桁に1つずつ持つこととする.
例えば2143は4桁パンデジタル数であり, かつ素数である. n桁(この問題の定義では9桁以下)パンデジタルな素数の中で最大の数を答えよ.

from itertools import permutations

def hoge(num):
    # 大きい桁数から
    for n in range(num, 0, -1):
        d = '123456789'[:n]
        # パンデジタル数を大きい順に
        perm = sorted(permutations(d), reverse=True)
        for p in perm:
            i = int(''.join(p))
            if is_prime(i): return i

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(9))

python3とpython2.7で実行速度にかなりの差が出る。

xxx@xxx:~$ time python3 pe41.py
7652413
real    0m1.005s
user    0m0.956s
sys     0m0.048s
xxx@xxx:~$ time python pe41.py
7652413
real    0m23.992s
user    0m23.960s
sys     0m0.028s
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