Problem 49 : Prime permutations
Problem Statement
The arithmetic sequence, 1487, 4817, 8147, in which each of the terms increases by 3330, is unusual in two ways: (i) each of the three terms are prime, and, (ii) each of the 4-digit numbers are permutations of one another.
There are no arithmetic sequences made up of three 1-, 2-, or 3-digit primes, exhibiting this property, but there is one other 4-digit increasing sequence.
What 12-digit number do you form by concatenating the three terms in this sequence?
Solution
from itertools import permutations
def sieve(n):
is_prime = [True]*n
is_prime[0] = False
is_prime[1] = False
is_prime[2] = True
for i in range(3,int(n**0.5+1),2):
index = i*2
while index < n:
is_prime[index] = False
index = index+i
prime = [2]
for i in range(3,n,2):
if is_prime[i]:
prime.append(i)
return prime
prime=sieve(10000)
primes = [x for x in prime if x > 1487]
def create(b):
for i in range(len(b)):
for j in range(i+1, len(b)):
difference = b[j] - b[i]
if b[j] + difference in b:
return str(b[i])+str(b[j])+str(b[j]+difference)
return False
for i in primes:
p = permutations(str(i))
a = [int(''.join(x)) for x in p]
a = list(set([x for x in a if x in primes]))
a.sort()
if len(a) >= 3:
if create(a):
print (create(a))
break
Output
296962999629