Skip to main content

Problem 34 Project Euler Solution with Python

Digit factorials

145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.
Find the sum of all numbers which are equal to the sum of the factorial of their digits.
Note: as 1! = 1 and 2! = 2 are not sums they are not included.

The question might seem simple as it is just asking the factorials of the digit and to check if the digit factorials is same as the number. But there are some hurdles one will have to come across to solve this problem.

The first problem will be to find the limit up to which the iterations are to be calculated.

To find the upper bound you will have to take a look at Factorion Wikipedia.

Now to split each and every digit in the number you will have to take a look at: Split an integer to digits to check ISBN - Stack Overflow

First I have imported the factorial function from math module.

As we knew that we will have to find the factorial of the digits form 0-9, instead of calculating it every time in the iteration, I stored the pre-calculated values so that they can used later.

I have used the above Stack overflow answer to split the digits to find the factorial sum.

Started iteration and calculated the value.

That's it. No big algorithm involved.

Program

As you can see the program is very basic and simple.

Instead of using the factorial_digits function I have also tried with list comprehension inside the for loop which turned out to be time taking. fd = [f(int(x)) for x in str(i)], I used this code and it ran for about 6 seconds extra. So I have eliminated that part with the basic function.

As always you can download the source code form Github Gist pep34.py.

Output


Summary

This problem was relatively easy but optimizing the performance of code was bit challenging. With the help of internet community I made it happen and I am satisfied with the result. The code is running under 2 seconds for a large number of iterations.

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.

Please do comment if you have found any typo, or have a better program or have a different program or have any suggestions. I will be glad to view each of them.

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

Project Euler Problem 66 Solution with python

Diophantine equation ¶ Consider quadratic Diophantine equations of the form: $$ x^{2} – Dy^{2} = 1 $$ For example, when $D = 13$, the minimal solution in $ x $ is $ 649^{2} – 13 \times 180^{2} = 1 $ It can be assumed that there are no solutions in positive integers when $ D $ is square. By finding minimal solutions in $ x $ for $ D = {2, 3, 5, 6, 7} $, we obtain the following: $$ 3^{2} – 2×2^{2} = 1 $$ $$ 2^{2} – 3×1^{2} = 1 $$ $$ 9^{2} – 5×4^{2} = 1 $$ $$ 5^{2} – 6×2^{2} = 1 $$ $$ 8^{2} – 7×3^{2} = 1 $$ Hence, by considering minimal solutions in $ x $ for $ D ≤ 7 $, the largest $ x $ is obtained when $ D = 5 $. Find the value of $ D ≤ 1000 $ in minimal solutions of $ x $ for which the largest value of $ x $ is obtained.

Project Euler Problem 67 Solution with Python

Maximum path sum II By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23. 3 7 4 2 4 6 8 5 9 3 That is, 3 + 7 + 4 + 9 = 23. Find the maximum total from top to bottom in triangle.txt (right click and 'Save Link/Target As...'), a 15K text file containing a triangle with one-hundred rows.