Skip to main content

Problem 27 Project Euler Solution with python

Quadratic primes

Euler discovered the remarkable quadratic formula:

n² + n + 41

It turns out that the formula will produce 40 primes for the consecutive values n = 0 to 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible by 41, and certainly when n = 41, 41² + 41 + 41 is clearly divisible by 41.

The incredible formula  n² − 79n + 1601 was discovered, which produces 80 primes for the consecutive values n = 0 to 79. The product of the coefficients, −79 and 1601, is −126479.

Considering quadratics of the form:
n² + an + b, where |a| < 1000 and |b| < 1000


where |n| is the modulus/absolute value of n
e.g. |11| = 11 and |−4| = 4
Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0.

Before I start solving this problem, I would like to apologize for not posting the solution for these many days. I will try to post a solution every day, but I had some other work and couldn't post any.

This problem was pretty easy, but to solve this problem you will have to make some observations. Okay lets first see the observations and then we can write the program.

Let us consider the equation as Æ’(n) = n2+an+b, for Æ’(0) to be prime the value of b should be prime. So we can eliminate all the composite numbers. Now for selecting the value of 'a' consider the following equations:

Æ’1(n) = n2+n+13
Æ’2(n) = n2+2n+13
Æ’3(n) = n2+3n+13
Æ’4(n) = n2+4n+13
Æ’5(n) = n2+5n+13

or choose any number of equations you want, but make sure that the value of b is a prime number(it is better that all the equations have same value of b to make observations), the value of 'a' should be a mix of both composite and prime numbers as shown.

Number of iterations after which the equations above don't produce a prime number is

Æ’1(n) → n = 0
Æ’2(n) → n = 0
Æ’3(n) →  n = 0, 1, 2, 3, 4, 5, 6, 7, 8
Æ’4(n) → n = 0
Æ’5(n) →  n = 0, 1

If you have observed the equations which had 'a' with prime numbers had more iterations when compared to the composite numbers. Also you should have observed that when composite numbers are used the values of 'n' don't go a long way as the prime number do.

This proves that you can eliminate all the composite numbers for 'a'. This works for all the value of negative 'a' also but not negative 'b', because we cannot have prime numbers which are less than 0.

So you can finally just use prime numbers below 1000 for both 'a' and 'b' in the quadratic equation.

Now we know the forms that quadratic equation takes, but we don't know the maximum value the quadratic can produce, but checking each and every number for Primality will be inefficient. So the best way is that we will use the primes upto 1000 which we have already generated for 'a', 'b' and any new prime number created greater than 1000 will be checked for Primality and will be appended to a primes list so that we can eliminate extra iterations.

That's it, as simple as that. Now go ahead and see the program line by line and I am sure you will understand it easily.

Program

The code is well commented . I have already explained the algorithm behind this code above.

Seive of Eratosthenes function has been used from problem 7 solution with python.

[:] list slicing has been used to make a copy of the list. If we had not copied the list and just made use of the same list then as we keep on appending a new prime  to primes the value also gets appended to prime1000 also and this will become an infinite loop. For example:

>>> list1 = [1,2,3]
>>> list2 = list1
>>> for i in list1:
 list2.append(i)
 print list1

 
[1, 2, 3, 1]
[1, 2, 3, 1, 2]
[1, 2, 3, 1, 2, 3]
[1, 2, 3, 1, 2, 3, 1]
.............................. this continues forever!
In the above example even though I have appended the value to list2 the value also got appended to list1 making the for loop to be infinite.

Solution is to make a copy of the list and not just use the same list. You can copy list in many ways.
How to clone or copy a list in python?
>>> list1 = [1,2,3]
>>> list2 = list1[:] #fastest
>>> list2 = list(list1) 
>>> import copy #not fast
>>> list2 = copy.copy(list1)
>>> list2 = copy.deepcopy(list1)
>>> 
If you want you can download the source code from github gist pep27.py

Output


Summary

I didn't knew how to prove that 'a' takes prime numbers as values, but finally I took an example and have proved it to you. This problem is a direct programming of the question and there is no need for any new mathematical concept.

I have tried my level best to explain each and every part in this post clearly. But if you haven't understood anything or have any doubt then please do comment in the comment box below and I will be glad to help you.

Please don't hesitate to comment if you have found any typo or any mistake in any part of this website, so that I can rectify the mistake at earliest. Please do share your code in the comment box below even if it runs slower than above code. 

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

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 j u st a brute force problem. If you have come here because you don't know the limit upto which you will h ave to gener ate the prime numbers t hen go ahe ad and t r y with 10,000 . When I first start ed solving the problem I chose 1 million(beca use most of the problem s on project E uler have this limit ), but it took very long for the computer to fin d the solution. After searching on the internet then I found many people choosing 10, 000 so I have changed my in put f rom 1 million to 10000 and the output was f ast. He