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));
}
}
|
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)