歐拉計劃 41

如果一個數字將1到n的每個數字都使用且只使用了一次,我們將其稱其爲一個n位的pandigital數。

例如,2143是一個4位的pandigital數,並且是一個質數。

最大的n位pandigital質數是多少?

import math
import itertools


def is_prime(x):
    """ 質數判斷 """
    if x == 1:
        return False
    if x == 2:
        return True
    assert math.floor(x) == x and x > 0
    x_sqrt = int(math.sqrt(x))
    l = [2]
    l.extend(range(3, x_sqrt + 1, 2))
    for i in l:
        if x % i == 0:
            return False
    return True


# 排列
flag = False
for n in range(9, 0, -1):
    if sum(range(1, n + 1)) % 3 == 0:
        continue
    n_list = list(itertools.permutations(range(1, n + 1), n))
    for i in range(len(n_list) - 1, -1, -1):
        num = sum([n_list[i][j] * 10 ** (n - 1 - j) for j in range(n)])
        if is_prime(num):
            flag = True
            break
    if flag:
        break
print(num)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章