Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
The first method I tried was as follows:
As you can see my idea was to first generate all the numbers which can divide 13195(or 600851475143) and store them in a list named
Even though this program worked for the example given in the problem, when I tried to apply similar code to the question(600851475143), it took more than 1 minute to just get the numbers which can divide 600851475143, which should not be the case according to Project Euler.
So I had to frame another program to get the solution. I first searched on google "How to Factor a number", where I found this one: Wikihow Factor a Number.
Please see method 2 on wikihow Factor a number to understand the concept behind the program.It is suggested to recap again even if you know how to factor a number.
What is the largest prime factor of the number 600851475143 ?
The first method I tried was as follows:
#List to store all the divisible numbers divisible = [] #Iterator for while loop i = 2 #While loop to check if a number can divide while i < 13195: if 13195 % i == 0: divisible.append(i) print i i = i+1 #Function to check if the number is prime def isPrime(n): for i in range(2,n): if n % i == 0: return False return True #A for loop to check for prime numbers # in divisible list for i in divisible: print i, isPrime(i)
divisible
. Next check if each and every number in the list is prime or not. Finally the largest number which is prime will be the answer.Even though this program worked for the example given in the problem, when I tried to apply similar code to the question(600851475143), it took more than 1 minute to just get the numbers which can divide 600851475143, which should not be the case according to Project Euler.
So I had to frame another program to get the solution. I first searched on google "How to Factor a number", where I found this one: Wikihow Factor a Number.
Please see method 2 on wikihow Factor a number to understand the concept behind the program.It is suggested to recap again even if you know how to factor a number.
Program
The only thing I would like to explain in this program is the while loop which might be confusing for some of you.
Before I will explain, first see the following image, which has the factorization of the number 13195.
Prime Factors of 13195 |
Now to be simple this is what is happening in the while loop. Lets understand the while loop iteration by iteration.
The while loop starts with
i1 = 2
. We are not considering the value of 1 and the number itself as we are finding the factors.
As the loop progresses till 5, 5 will be able to divide 13195 and thus the value of the
number1
is changed from 13195 to 2639. Also the value of i1
is changed from 5 to 1, at the end of for loop a 1 is added and it again has a value of 2 which we had at the start.
This loop will run until the value of
i1
is 7, and again the value of the number1
is changed from 2639 to 377. Again the value of i1
is changed to 2 at the end of for loop.
Loop again starts and this time it will run till the value of
i1
becomes 13 and the value of number1
is changed to 29.
This time there is no
i1
which is able to divide 29 and the loop finishes.
As you can see the last value of the number1 variable is the answer we require.
I have printed the same, so that we can see the output.
You can see or download the program from Github Gist if you want.
You can see or download the program from Github Gist if you want.
Output
Summary
This problem was pretty easy to solve. I think this problem can be solved in some other way which will reduce the execution time. But for now this is what I have. If you have a better code then please share it with me so that I we can together help the community.
Coming back to code, I think you could have got lost at the while loop. I think I have thoroughly explained this part of code so that it will be easy for each and every one to understand. All the other part of code is well commented so that you can understand it easily. But if you have any doubt or didn't understand anything, comment in the comment box below and I will be glad to help you. You can also contact me if you want to.
Please don't hesitate to comment below, if you want me to add any extra thing. Also please do help me if I have made any typo or any mistake.
If you want you can contact me.
Thank you. Have a nice day.😀