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)