如果一個數字將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)