1487, 4817, 8147这个序列,每个比前一个递增3330,而且这个序列有两个特点:
1. 序列中的每个数都是质数。
2. 每个四位数都是其他数字的一种排列。
1,2,3位组成的三个质数的序列中没有具有以上性质的。但是还有另外一个四位的递增序列满足这个性质。
如果将这另外一个序列的三个数连接起来,组成的12位数字是多少?
import math
import time
def get_digit_str(x):
""" 各位数 """
digit = []
while x:
digit.append(x % 10)
x = x // 10
digit.sort()
return str(digit)
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
t0 = time.time()
prime_dict = dict()
for i in range(1001, 10000, 2):
if is_prime(i):
prime_dict.setdefault(get_digit_str(i), []).append(i)
for prime_list in prime_dict.values():
if len(prime_list) < 3:
continue
for i in range(len(prime_list) - 2):
for j in range(i + 1, len(prime_list) - 1):
d = prime_list[j] - prime_list[i]
if prime_list[j] + d in prime_list:
print(prime_list[i] * 10 ** 8 + prime_list[j] * 10 ** 4 + prime_list[j] + d)
t1 = time.time()
print(t1 - t0)