Skip to main content

Problem 60 Project Euler Solution with python

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.

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.😃

Popular posts from this blog

Making a quiz web app with python and flask

Edit : When you are creating a web app with h tml templates, then y ou will have to sa ve the html file in templates folder in the Current Wor ki ng Directory( CWD). If you save the file in the C W D directl y you will get a TemplateNotFound error. Thank you Udhay for pointing it out.   In this post we will create a quiz website using python . I will be using the flask framework . After reading this tutorial you will learn form submission , flask templates , python code in flask templates , shuffling the questions and options with the random module and few others.  Please note that this tutorial is not big as it seems to be. Some of the code has been rewritten to maintain consistency and also font size is somewhat big so that your eyes won't get stressed reading this tutorial. Also the content has not occupied the full width of the page. In this tutorial I am assuming that you are having a very basic understanding of the flask framework . Please refer the documentation

Problem 11 Project Euler Solution with python

Largest product in a grid In the 20×20 grid below, four numbers along a diagonal line have been marked in red. 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07