Prime permutations
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?
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?
An another question on primes and permutations. I will explain to you, the algorithm I have used in program, in this section,. As I have given some random names to the variables(I didn't knew what to name the variables in a meaningful way). This issue might confuse you and I will explain to you the code in the program section.
As the question states that the number is prime, and it is 4 digit number it is better that we will sieve our prime numbers upto 10000. One more condition states that 1487 is the first case, so we will remove all the primes less than or equal to 1487.
I think it will be better if I will explain you the algorithm step by step.
1) Prime sieve upto 10000.
2) Remove all the primes less than 1487 in the primes list which we have created in Step 1.
3) Take each and every prime number and create permutations of the prime number.
4) Remove all the duplicates in the list generated in Step 3. Only unique elements are entertained.
5) Sort the list in ascending order.
6) If the length of the list generated till Step 5 is greater than or equal to 3 then go to Step 7 otherwise continue for next iteration.
7) Start a for loop to iterate through each and every number in the list. In the iteration, take a number and subtract it with other number, call it difference. Now add the difference to the second element under consideration and check if the new element(second number + difference) is in the list. If the new number is in the list stop looping and return the three numbers, else continue with the next list.
Program
We have used Sieve of Eratosthenes from Problem 37 Project Euler Solution with python.
You can learn more about Sieve from Wikipedia.
Line 35 - Line 41:
create
function is the Step 7. Line 44: Step 1.
Line 47: Step 2.
Line 51 & Line 52: Step 3.
Line 53: Step 4.
Line 54: Step 5.
Line 55 - Line 58: Step 6 with Step 7 inherited
You can download the source code from Github Gist pep49.py
Output
Summary
When I first wrote solution for this problem I only considered lists, which had length of 3. This mistake didn't give me answer, which made me think for lists whose length is greater than or equal to 3. I got the answer. I am satisfied with the solution which I have written, but there is still little scope for improvement. One can think in removing the unnecessary if statements if any in the program to improve the performance of the program
As always you can comment in the comment box below if you have any doubt or haven't understood anything. I will be glad to help you.
Please do comment if you have found any typo or have a different or better program or have a suggestion. I will be very happy to view each of them.
You can also contact me.
Thank you. Have a nice day😃!