049. 素数排列(prime permutations)
算术序列1487,4817,8147其中后一项在前一项的基础上增加了3300,这个序列有两个独特的性质:i)三个数都是素数;ii)每个数的四位数都是另外两个数字四位数的重新排列。没有一位、两位和三位素数组成的算术序列满足上面的性质,但是还有一组满足这个性质的四位数递增序列。这个序列的三个数前后拼接组成的十二位数是多少?
分析:此题的解法比较直接,题目说了满足条件的三个数是四位的素数,同时每个数都是另外两个数的重新排列,这意味着三个数的各位数构成的集合应该相同。所以我们只需要筛选从一千到一万的四位数素数,将素数加上3300得到第二个数,再加上6600得到第三个数,如果这两个数都是素数且构成三个数的各位数的集合相等,则是满足条件的数。最后将三个数转化成字符串前后相加拼接,即为题目所求。代码如下:
from sympy import isprime,primerange
def main():
primes = primerange(1000,10000)
for p in primes:
if p != 1487:
a = p + 3330
b = p + 6660
if isprime(a) and isprime(b) and set(str(p))==set(str(a))==set(str(b)):
return str(p) + str(a) + str(b)