Given a positive integer ‘n'( 1 <= n <= 1015). Find the largest prime factor of a number.
Input: 6
Output: 3
Explanation
Prime factor of 6 are- 2, 3
Largest of them is '3'
Input: 15
Output: 5
Method 1:
The approach is simple, just factorize the given number by dividing it with the divisor of a number and keep updating the maximum prime factor. See this to understand more.
Below is the implementation of the above approach
C++
// C++ Program to find largest prime // factor of number #include <iostream> #include<bits/stdc++.h> using namespace std;
// A function to find largest prime factor long long maxPrimeFactors( long long n)
{ // Initialize the maximum prime factor
// variable with the lowest one
long long maxPrime = -1;
// Print the number of 2s that divide n
while (n % 2 == 0) {
maxPrime = 2;
n >>= 1; // equivalent to n /= 2
}
// n must be odd at this point
while (n % 3 == 0) {
maxPrime = 3;
n=n/3;
}
// now we have to iterate only for integers
// who does not have prime factor 2 and 3
for ( int i = 5; i <= sqrt (n); i += 6) {
while (n % i == 0) {
maxPrime = i;
n = n / i;
}
while (n % (i+2) == 0) {
maxPrime = i+2;
n = n / (i+2);
}
}
// This condition is to handle the case
// when n is a prime number greater than 4
if (n > 4)
maxPrime = n;
return maxPrime;
} // Driver program to test above function int main()
{ long long n = 15;
cout << maxPrimeFactors(n) << endl;
n = 25698751364526;
cout << maxPrimeFactors(n);
} |
C
// C Program to find largest prime // factor of number #include <math.h> #include <stdio.h> // A function to find largest prime factor long long maxPrimeFactors( long long n)
{ // Initialize the maximum prime factor
// variable with the lowest one
long long maxPrime = -1;
// Print the number of 2s that divide n
while (n % 2 == 0) {
maxPrime = 2;
n >>= 1; // equivalent to n /= 2
}
// n must be odd at this point
while (n % 3 == 0) {
maxPrime = 3;
n = n / 3;
}
// now we have to iterate only for integers
// who does not have prime factor 2 and 3
for ( int i = 5; i*i<=n; i += 6) {
while (n % i == 0) {
maxPrime = i;
n = n / i;
}
while (n % (i + 2) == 0) {
maxPrime = i + 2;
n = n / (i + 2);
}
}
// This condition is to handle the case
// when n is a prime number greater than 4
if (n > 4)
maxPrime = n;
return maxPrime;
} // Driver program to test above function int main()
{ long long n = 15;
printf ( "%lld\n" , maxPrimeFactors(n));
n = 25698751364526;
printf ( "%lld" , maxPrimeFactors(n));
return 0;
} |
Java
// Java Program to find largest // prime factor of number import java.io.*;
import java.util.*;
class GFG {
// function to find largest prime factor
static long maxPrimeFactors( long n)
{
// Initialize the maximum prime
// factor variable with the
// lowest one
long maxPrime = - 1 ;
// Print the number of 2s
// that divide n
while (n % 2 == 0 ) {
maxPrime = 2 ;
// equivalent to n /= 2
n >>= 1 ;
}
// n must be odd at this point
while (n % 3 == 0 ) {
maxPrime = 3 ;
n = n / 3 ;
}
// now we have to iterate only for integers
// who does not have prime factor 2 and 3
for ( int i = 5 ; i <= Math.sqrt(n); i += 6 ) {
while (n % i == 0 ) {
maxPrime = i;
n = n / i;
}
while (n % (i + 2 ) == 0 ) {
maxPrime = i + 2 ;
n = n / (i + 2 );
}
}
// This condition is to handle the case
// when n is a prime number greater than 4
if (n > 4 )
maxPrime = n;
return maxPrime;
}
// Driver code
public static void main(String[] args)
{
Long n = 15l;
System.out.println(maxPrimeFactors(n));
n = 25698751364526l;
System.out.println(maxPrimeFactors(n));
}
} |
Python3
# Python3 code to find largest prime # factor of number import math
# A function to find largest prime factor def maxPrimeFactors (n):
# Initialize the maximum prime factor
# variable with the lowest one
maxPrime = - 1
# Print the number of 2s that divide n
while n % 2 = = 0 :
maxPrime = 2
n >> = 1 # equivalent to n /= 2
# n must be odd at this point
while n % 3 = = 0 :
maxPrime = 3
n = n / 3
# now we have to iterate only for integers
# who does not have prime factor 2 and 3
for i in range ( 5 , int (math.sqrt(n)) + 1 , 6 ):
while n % i = = 0 :
maxPrime = i
n = n / i
while n % (i + 2 ) = = 0 :
maxPrime = i + 2
n = n / (i + 2 )
# This condition is to handle the
# case when n is a prime number
# greater than 4
if n > 4 :
maxPrime = n
return int (maxPrime)
# Driver code to test above function n = 15
print (maxPrimeFactors(n))
n = 25698751364526
print (maxPrimeFactors(n))
|
C#
// C# program to find largest // prime factor of number using System;
class GFG {
// function to find largest prime factor
static long maxPrimeFactors( long n)
{
// Initialize the maximum prime
// factor variable with the
// lowest one
long maxPrime = -1;
// Print the number of 2s
// that divide n
while (n % 2 == 0) {
maxPrime = 2;
// equivalent to n /= 2
n >>= 1;
}
// n must be odd at this point
while (n % 3 == 0) {
maxPrime = 3;
n = n / 3;
}
// now we have to iterate only for integers
// who does not have prime factor 2 and 3
for ( int i = 5; i <= Math.Sqrt(n); i += 6) {
while (n % i == 0) {
maxPrime = i;
n = n / i;
}
while (n % (i + 2) == 0) {
maxPrime = i + 2;
n = n / (i + 2);
}
}
// This condition is to handle the case
// when n is a prime number greater than 4
if (n > 4)
maxPrime = n;
return maxPrime;
}
// Driver code
public static void Main()
{
long n = 15L;
Console.WriteLine(maxPrimeFactors(n));
n = 25698751364526L;
Console.WriteLine(maxPrimeFactors(n));
}
} |
Javascript
<script> // Javascript program to find largest prime factor function maxPrimeFactor(n) {
let maxPrime = -1;
while (n % 2 == 0) {
n = n / 2;
maxPrime = 2;
}
while (n % 3 == 0) {
n = n / 3;
maxPrime = 3;
}
for (let i = 5; i <= Math.sqrt(n); i += 6) {
while (n % i == 0) {
maxPrime = i;
n = n / i;
}
while (n % (i + 2) == 0) {
maxPrime = i + 2;
n = n / (i + 2);
}
}
return n > 4 ? n : maxPrime;
} document.write(maxPrimeFactor(15)); document.write(maxPrimeFactor(25698751364526)); // This code is contributed by 8chkh7v1i3lrbhuvxyg3d9gbg9e097eodfhj7qbz. </script> |
PHP
<?php // PHP Program to find // largest prime factor // of number // A function to find // largest prime factor function maxPrimeFactors( $n )
{ // Initialize the maximum
// prime factor variable
// with the lowest one
$maxPrime = -1;
// Print the number of
// 2s that divide n
while ( $n % 2 == 0)
{
$maxPrime = 2;
// equivalent to n /= 2
$n >>= 1;
}
// n must be odd at this point
while ( $n % 3 == 0) {
$maxPrime = 3;
$n = $n /3;
}
// now we have to iterate only for integers
// who does not have prime factor 2 and 3
for ( $i = 3; $i <= sqrt( $n ); $i += 2)
{
while ( $n % $i == 0)
{
$maxPrime = $i ;
$n = $n / $i ;
}
while ( $n % ( $i +2) == 0) {
$maxPrime = $i +2;
$n = $n / ( $i +2);
}
}
// This condition is
// to handle the case
// when n is a prime
// number greater than 4
if ( $n > 4)
$maxPrime = $n ;
return $maxPrime ;
} // Driver Code
$n = 15;
echo maxPrimeFactors( $n ), "\n" ;
$n = 25698751364526;
echo maxPrimeFactors( $n ), "\n" ;
?> |
Output
5 328513
Time complexity:
Auxiliary space:
Method 2:
Follow the steps below for the implementation:
- Initialize variables largest_prime to -1, i to 2, and n to the input integer.
- Start a while loop that continues as long as i * i <= n. This loop will iterate through all possible factors of n.
- In the while loop, start another while loop that continues as long as n % i == 0. This inner loop will divide n by i until n is no longer divisible by i.
- In the inner loop, set largest_prime to i, and update n by dividing it by i.
- At the end of the inner loop, increment i by 1.
- After the outer loop, if n > 1, set largest_prime to n. This is because n could be a prime number larger than any of its factors.
- Return largest_prime.
Below is the implementation of the above approach:
C++
// C++ code to find largest prime // factor of number #include <bits/stdc++.h> using namespace std;
int maxPrimeFactors( long long n)
{ /*
* Find the largest prime factor of a positive integer
* 'n'
* @param n: positive integer (1 <= n <= 10^15)
* @return: largest prime factor of n
*/
int largest_prime = -1;
int i = 2;
while (i * i <= n) {
while (n % i == 0) {
largest_prime = i;
n = n / i;
}
i = i + 1;
}
if (n > 1) {
largest_prime = n;
}
return largest_prime;
} int main()
{ long long n = 15;
cout << maxPrimeFactors(n) << endl;
n = 25698751;
cout << maxPrimeFactors(n) << endl;
return 0;
} // This code is contributed by Susobhan Akhuli |
Java
/*package whatever //do not write package name here */ import java.io.*;
class GFG {
static long maxPrimeFactors( long n)
{
/*
* Find the largest prime factor of a positive integer
* 'n'
* @param n: positive integer (1 <= n <= 10^15)
* @return: largest prime factor of n
*/
long largest_prime = - 1 ;
long i = 2 ;
while (i * i <= n) {
while (n % i == 0 ) {
largest_prime = i;
n = n / i;
}
i = i + 1 ;
}
if (n > 1 ) {
largest_prime = n;
}
return largest_prime;
}
public static void main (String[] args) {
long n = 15 ;
System.out.println(maxPrimeFactors(n));
n = 25698751 ;
System.out.println(maxPrimeFactors(n));
}
} //code contributed by shubhamrajput6156 |
Python3
import math
def max_prime_factors(n):
"""
Find the largest prime factor of a positive integer 'n'.
:param n: positive integer (1 <= n <= 10^15)
:return: largest prime factor of n
"""
largest_prime = - 1
i = 2
while i * i < = n:
while n % i = = 0 :
largest_prime = i
n = n / / i
i = i + 1
if n > 1 :
largest_prime = n
return largest_prime
if __name__ = = "__main__" :
n = 15
print (max_prime_factors(n))
n = 25698751
print (max_prime_factors(n))
|
C#
// C# code to find largest prime // factor of number using System;
class GFG
{ static int MaxPrimeFactors( long n)
{
/*
* Find the largest prime factor of a positive integer
* 'n'
* @param n: positive integer (1 <= n <= 10^15)
* @return: largest prime factor of n
*/
int largestPrime = -1;
int i = 2;
while (i * i <= n)
{
while (n % i == 0)
{
largestPrime = i;
n = n / i;
}
i = i + 1;
}
if (n > 1)
{
largestPrime = ( int )n;
}
return largestPrime;
}
static void Main()
{
long n = 15;
Console.WriteLine(MaxPrimeFactors(n));
n = 25698751;
Console.WriteLine(MaxPrimeFactors(n));
}
} |
Javascript
// JS code to find largest prime // factor of number function maxPrimeFactors(n)
{ /*
* Find the largest prime factor of a positive leteger
* 'n'
* @param n: positive leteger (1 <= n <= 10^15)
* @return: largest prime factor of n
*/
let largest_prime = -1;
let i = 2;
while (i * i <= n) {
while (n % i == 0) {
largest_prime = i;
n = n / i;
}
i = i + 1;
}
if (n > 1) {
largest_prime = n;
}
return largest_prime;
} let n = 15; document.write(maxPrimeFactors(n)); n = 25698751; document.write(maxPrimeFactors(n)); |
Output
5 1409
Time complexity: O(sqrt(n)).
Auxiliary space: O(1)