Prime pair sets
The primes 3, 7, 109, and 673, are quite remarkable. By taking any
two primes and concatenating them in any order the result will always be
prime. For example, taking 7 and 109, both 7109 and 1097 are prime. The
sum of these four primes, 792, represents the lowest sum for a set of
four primes with this property.
Find the lowest sum for a set of five primes for which any two primes concatenate to produce another prime.
This problem is just a brute force problem. If you have come here because you don't know the limit upto which you will have to generate the prime numbers then go ahead and try with 10,000. When I first started solving the problem I chose 1 million(because most of the problems on projectEuler have this limit), but it took very long for the computer to find the solution. After searching on the internet then I found many people choosing 10,000 so I have changed my input from 1 million to 10000 and the output was fast.
Here goes my algorithm.
We will generate prime numbers upto 10000(Assumed) using Sieve of Erotosthenes.
Take the first number from the prime numbers list, let it be a
then take the second number the prime numbers list, let it be b . Remember that b > a.
Check if ab & ba are primes, if they are primes, then take the third number from the prime numbers list, let it be c. Remember that c > b.
Check if ac, ca, bc, ca are all primes. If they are primes then take a fourth number from the prime numbers list, let it be d. Remember that d > c.
Check if ad, da, bd, db, cd, dc are all primes. If they are all primes then take the fifth number from the prime numbers list, let the number be e. Remember that e > d.
Now check if ae, ea, be, eb, ce, ec, de, ed are all primes. If they are all primes then find a + b + c + d + e.
Now you might have got confused on why I am checking the primality of ab, ba, ac, ca .....
To understand this we will have to go back to Permutations and Combinations.
We have 5 numbers, then the number of ways of forming 2 digit numbers are 5P2 = 20 and if you write them then you will get the above permutations.
Hope you have understood the concept.
Find the lowest sum for a set of five primes for which any two primes concatenate to produce another prime.
This problem is just a brute force problem. If you have come here because you don't know the limit upto which you will have to generate the prime numbers then go ahead and try with 10,000. When I first started solving the problem I chose 1 million(because most of the problems on projectEuler have this limit), but it took very long for the computer to find the solution. After searching on the internet then I found many people choosing 10,000 so I have changed my input from 1 million to 10000 and the output was fast.
Here goes my algorithm.
We will generate prime numbers upto 10000(Assumed) using Sieve of Erotosthenes.
Take the first number from the prime numbers list, let it be a
then take the second number the prime numbers list, let it be b . Remember that b > a.
Check if ab & ba are primes, if they are primes, then take the third number from the prime numbers list, let it be c. Remember that c > b.
Check if ac, ca, bc, ca are all primes. If they are primes then take a fourth number from the prime numbers list, let it be d. Remember that d > c.
Check if ad, da, bd, db, cd, dc are all primes. If they are all primes then take the fifth number from the prime numbers list, let the number be e. Remember that e > d.
Now check if ae, ea, be, eb, ce, ec, de, ed are all primes. If they are all primes then find a + b + c + d + e.
Now you might have got confused on why I am checking the primality of ab, ba, ac, ca .....
To understand this we will have to go back to Permutations and Combinations.
We have 5 numbers, then the number of ways of forming 2 digit numbers are 5P2 = 20 and if you write them then you will get the above permutations.
Hope you have understood the concept.
Program
Don't get scared by seeing the size of the program. It is very simple.Here goes the explanation of the program:
Line 10 - 22: This is the Sieve of Erotosthenes. It is a very great algorithm to find the prime numbers upto a given number. You can learn more about the Sieve of Erotosthenes on Wiki. You can also see the explanation of the program code given here: Problem 35 Project Euler Solution with python. . We have modified a little bit of that program but the core concept in the same.
You can also learn more about sieve from:
Prime Sieve
Geeks of Geeks Sieve of Erotosthenes
Line 34 - 56: This is Rabin Miller Primality test. This function can be used to find if the given number is prime or not. This function will be useful when we will find if the permutations of the given number is prime or not. You can see more about Rabin Miller from here:
Miller Rabin Primality Test - Wiki
Algorithm Rabin Miller
We could have used this function to generate all the prime numbers upto 10000, but the problem is that this function is slow to generate the prime numbers when compared to Sieve of Erotosthenes. But this function does its job well when it is assigned to check if the given number is prime.
Line 60 - 66: This function
comb
will find all the permutations of the given number. This function will not do any string to integer, integer to string conversions. It will only do the math. I suggest you to work out for your own on how this function works. It is fun.Rest of the code has already been explained in the algorithm section. I suggest you to take some random prime numbers and plug them in the place of the variables in the program and then you will for sure understand how the program is working very easily.
As always you can download the program from Github Gist pep60.py
Output
Summary
Even though this problem has got 20% rating I don't think that this problem is not worth giving that rating. This problem is very easy once you will be able to guess the limit upto which you will have to find the prime numbers. This took very long for me. But no problem I was able to solve the problem with the help of internet community with confidence. A nice problem in one way, it tests the way you will understand the problem and try to crack it. Even though I was able to solve this problem in around 12 seconds, there should be some scope for improvement.As always if you have any doubt or didn't understand anything then you can comment in the comment box below and I will be glad to help you.
If you have any suggestion(s) or have found any typo or if you have any new program or better program then please comment in the comment box.
You can also contact me.
Thank you. Have a nice day.😃