Skip to main content

Problem 4 Project Euler Solution with Python

Largest Palindrome Number

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.?

To solve this problem I first wrote a program which was as follows:
#Time module
import time

#time at start of program
start = time.time()

#Function to check if number is palindrome
def isPalindrome(n):
 number = str(n)
 reverse_number = ''
 for k in number:
  reverse_number = k + reverse_number
 if reverse_number == number:
  return True
 return False

#largest_palindrome
largest_palindrome = 0

#For loop to generate multiples
for i in range(1000,100,-1):
 for j in range(1000,100,-1):
  number = i*j
  if number > largest_palindrome:
   if isPalindrome(number):
    largest_palindrome = number
#Printing the largest palindrome
print largest_palindrome

#Printing the time of execution
print time.time()-start
  I think the above program is pretty easy to understand also the time for the execution was less than 1 second. But I was not satisfied and wanted more faster program.

My first idea was to eliminate the function isPalindrome so that the time for calling the function is reduced throughout the iterations. But as isPalindrome checked if the reverse of the number was the number, so to remove it if I had checked directly the reverse of the number using the if statement, then I would be able to remove isPalindrome and also it would reduce the time of execution.

Because of using the reverse string operation and eliminating the isPalindrome function, time for execution of the code reduced by staggering 90%(approximately).

Program

I would like to explain the for loop block of code which is pretty interesting.

We will consider the example given in the question.

Before the starting of the code the value of the largest_palindrome1 is 0.

Now in the first iteration the value of i is 100 and at next lever the value of j is 100.

The if statement is True because the value of i*j which is 100*100 = 10000 is greater than 0.

In the next line we have used the string extended Slice operation to generate the reverse of the given number.

If the reverse is same then the number is palindrome. Also we have already checked if i*j is larger than largest_palindrome1, and so there is no need to check it again. In the present iteration (i=100, j=100), this condition doesn't execute and the if loop exits.

In the similar way the if loop checks if the number is palindrome and also if the number is larger than the previous value of largest_palindrome1, then the value of largest_palindrome1 is changed.

break has been used because it is un necessary to continue looping as we have found the largest palindrome number(This case is only true when we are iterating from 100 to 1 or 1000 to 1).

If you want to download the above program then you can download it from Github Gist

Output

Summary

I think this problem is also easy to solve but making it run at much shorter time was challenging. The execution time was around 0.01s which is small. But if you have any program whose execution time is less than the above program, please do share it with me so that it will be helpful for the community.

I think the code is pretty easy to understand because it has been commented properly. Also I have explained some part of the code. But if you have any doubt or didn't understand anything then please do comment in the comment box below and I will be glad to help you.

You can also contact me if you want.

If you have any suggestions or found any typo which I made, then please do let me know so that we can improve and help the community.

I would like to thank the Stackoverflow community, which helped me in reducing the execution time.
Jason has also written a very good solution for this question but the execution time was more than mine😋!

Thank you. Have a nice Day😃.

Popular posts from this blog

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.

Problem 43 Project Euler Solution with python

Sub-string divisibility The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property. Let d 1 be the 1 st digit, d 2 be the 2 nd digit, and so on. In this way, we note the following: d 2 d 3 d 4 =406 is divisible by 2 d 3 d 4 d 5 =063 is divisible by 3 d 4 d 5 d 6 =635 is divisible by 5 d 5 d 6 d 7 =357 is divisible by 7 d 6 d 7 d 8 =572 is divisible by 11 d 7 d 8 d 9 =728 is divisible by 13 d 8 d 9 d 10 =289 is divisible by 17 Find the sum of all 0 to 9 pandigital numbers with this property. One might write a simple solution using direct if else statements for this problem. Using if else statements, the execution time may be a few seconds. But this is not a very good approach. I too had written a program with if else statement which will take each and every permutation of the 0-9 Pandigital and check for the conditions given in the qu...

Add/Embed SVG to Blogger website

In this post I will tell you my method(trick) of adding SVG images in a blogger website or blog. Before starting , the first thin g I am assu m ing is that you are aware of SVG if you are here. If not please see S calable V ec tor G raphics Recently when I tried to embed a SVG image for a post on pygal, I tried uploading the SVG file and blogger Image uploader came up with an error, because of which I had to find some other way.  SVG File upload Error in Blogger  I started sea rc hing Google " Embed SVG in Blogger " . I found blogorrhea , w h ich gave some i nformatio n on add ing SVG directly as a markup , which worked , but I faced another problem using this . Also th is guy has used lot of Javascript which was confusin g for me, being new to using SVG.   So I first t houg ht of learning on h ow to embed SVG in HTML and t his on e worked out. Actually we can embed SVG in HTML i n following ways: Using Object tag Using Iframe tag Using embed...