Skip to main content

Problem 53 Project Euler Solution with python

Combinatoric selections

There are exactly ten ways of selecting three from five, 12345:
123, 124, 125, 134, 135, 145, 234, 235, 245, and 345
In combinatorics, we use the notation, 5C3 = 10.
In general,
nCr =
n!
r!(n−r)!
,where rn, n! = n×(n−1)×...×3×2×1, and 0! = 1.
It is not until n = 23, that a value exceeds one-million: 23C10 = 1144066.
How many, not necessarily distinct, values of  nCr, for 1 ≤ n ≤ 100, are greater than one-million?


This problem is also simple. There are few important points one has to consider before we can write a few for loops to solve the problem. You can call these points as algorithm also😊.

1) As you all know that two for loops required, one for n and one for r in nCr. According to the question the value of n(i.e first for loop) will start from 23 and end at 100. Value of r is discussed in (2).

2) The value of r in nCr will be in range of 4, n-4 i.e we can neglect the value of 0, 1, 2, 3, n-3, n-2, n-1, n. I have created my own proof for this one and here it goes:
nCr values r = 1,2,3
nCr values r = 1,2,3
nCr values r = 4
nCr values r = 4
As you can see from the above images that if we will take the values of r from 0,1,2,3,n-3, n-2, n-1, n, we will be in less than a million range. But the values can be in the range of 4 to n-4.

The same has been accomplished in the program. You can have a look at the program and you will for sure understand the program easily.

Program

I have used the inbuilt factorial function from math module.
for n in xrange(23, 101):
    for r in xrange(4,n-3):
xrange(a,b) generates all the numbers from a to b-1 and will not generate b. This is the reason why I have  used 101 instead of 100. This is the same reason why I have used n-3 instead of n-4 in the second for loop.

I think all the remaining things are simple enough.

You can download the source code from Github Gist pep53.py

Output


Summary

It just took me five minutes to write a solution for this problem. But I wanted to optimize my code and so I have printed all the iterations. Then I observed that the first three values and the last three values of a given n are always less than 1 million. Then I did some algebra and proved the result. This has optimized the code and had a very better performance. I am satisfied with the solution I have written. I don't know whether there is scope for improvement.

Please excuse me and correct me if my grammar is wrong or in an ambiguous way😃!

As always you can comment in the comment box if you have any doubt or didn't understand anything. I will be glad to help you.

Please don't hesitate to comment if you have found any typo or have a better program or have a different program, whatever programming language you might have used. Please do comment if you have any suggestion.

You can also contact me.

Thank you. Have a nice day😃!

Further reference: Math Captain - Combinations

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