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++
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long maxPrimeFactors( long long n)
{
long long maxPrime = -1;
while (n % 2 == 0) {
maxPrime = 2;
n >>= 1;
}
while (n % 3 == 0) {
maxPrime = 3;
n=n/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);
}
}
if (n > 4)
maxPrime = n;
return maxPrime;
}
int main()
{
long long n = 15;
cout << maxPrimeFactors(n) << endl;
n = 25698751364526;
cout << maxPrimeFactors(n);
}
|
C
#include <math.h>
#include <stdio.h>
long long maxPrimeFactors( long long n)
{
long long maxPrime = -1;
while (n % 2 == 0) {
maxPrime = 2;
n >>= 1;
}
while (n % 3 == 0) {
maxPrime = 3;
n = n / 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);
}
}
if (n > 4)
maxPrime = n;
return maxPrime;
}
int main()
{
long long n = 15;
printf ( "%lld\n" , maxPrimeFactors(n));
n = 25698751364526;
printf ( "%lld" , maxPrimeFactors(n));
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
static long maxPrimeFactors( long n)
{
long maxPrime = - 1 ;
while (n % 2 == 0 ) {
maxPrime = 2 ;
n >>= 1 ;
}
while (n % 3 == 0 ) {
maxPrime = 3 ;
n = n / 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 );
}
}
if (n > 4 )
maxPrime = n;
return maxPrime;
}
public static void main(String[] args)
{
Long n = 15l;
System.out.println(maxPrimeFactors(n));
n = 25698751364526l;
System.out.println(maxPrimeFactors(n));
}
}
|
Python3
import math
def maxPrimeFactors (n):
maxPrime = - 1
while n % 2 = = 0 :
maxPrime = 2
n >> = 1
while n % 3 = = 0 :
maxPrime = 3
n = n / 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 )
if n > 4 :
maxPrime = n
return int (maxPrime)
n = 15
print (maxPrimeFactors(n))
n = 25698751364526
print (maxPrimeFactors(n))
|
C#
using System;
class GFG {
static long maxPrimeFactors( long n)
{
long maxPrime = -1;
while (n % 2 == 0) {
maxPrime = 2;
n >>= 1;
}
while (n % 3 == 0) {
maxPrime = 3;
n = n / 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);
}
}
if (n > 4)
maxPrime = n;
return maxPrime;
}
public static void Main()
{
long n = 15L;
Console.WriteLine(maxPrimeFactors(n));
n = 25698751364526L;
Console.WriteLine(maxPrimeFactors(n));
}
}
|
Javascript
<script>
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));
</script>
|
PHP
<?php
function maxPrimeFactors( $n )
{
$maxPrime = -1;
while ( $n % 2 == 0)
{
$maxPrime = 2;
$n >>= 1;
}
while ( $n % 3 == 0) {
$maxPrime = 3;
$n = $n /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);
}
}
if ( $n > 4)
$maxPrime = $n ;
return $maxPrime ;
}
$n = 15;
echo maxPrimeFactors( $n ), "\n" ;
$n = 25698751364526;
echo maxPrimeFactors( $n ), "\n" ;
?>
|
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++
#include <bits/stdc++.h>
using namespace std;
int maxPrimeFactors( long long 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;
}
|
Java
import java.io.*;
class GFG {
static long maxPrimeFactors( long 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));
}
}
|
Python3
import math
def max_prime_factors(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#
using System;
class GFG
{
static int MaxPrimeFactors( long 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
function maxPrimeFactors(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));
|
Time complexity: O(sqrt(n)).
Auxiliary space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!
Last Updated :
11 Nov, 2023
Like Article
Save Article