如果一个数字将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)