Given a number N, print all the prime factors and their powers. Here N <= 10^18
Examples :
Input : 250 Output : 2 1 5 3 Explanation: The prime factors of 250 are 2 and 5. 2 appears once in the prime factorization of and 5 is thrice in it. Input : 1000000000000000000 Output : 2 18 5 18 Explanation: The prime factors of 1000000000000000000 are 2 and 5. The prime factor 2 appears 18 times in the prime factorization. 5 appears 18 times.
We cannot use Sieve’s implementation for a single large number as it requires proportional space. We first count the number of times 2 is the factor of the given number, then we iterate from 3 to Sqrt(n) to get the number of times a prime number divides a particular number which reduces every time by n/i. We divide our number n (whose prime factorization is to be calculated) by its corresponding smallest prime factor till n becomes 1. And if at the end n>2, it means it’s a prime number, so we print that particular number.
// CPP program to print prime factors and their // powers. #include <bits/stdc++.h> using namespace std;
// function to calculate all the prime factors and // count of every prime factor void factorize( long long n)
{ int count = 0;
// count the number of times 2 divides
while (!(n % 2)) {
n >>= 1; // equivalent to n=n/2;
count++;
}
// if 2 divides it
if (count)
cout << 2 << " " << count << endl;
// check for all the possible numbers that can
// divide it
for ( long long i = 3; i <= sqrt (n); i += 2) {
count = 0;
while (n % i == 0) {
count++;
n = n / i;
}
if (count)
cout << i << " " << count << endl;
}
// if n at the end is a prime number.
if (n > 2)
cout << n << " " << 1 << endl;
} // driver program to test the above function int main()
{ long long n = 1000000000000000000;
factorize(n);
return 0;
} |
//Java program to print prime // factors and their powers. class GFG {
// function to calculate all the // prime factors and count of // every prime factor static void factorize( long n) {
int count = 0 ;
// count the number of times 2 divides
while (!(n % 2 > 0 )) {
// equivalent to n=n/2;
n >>= 1 ;
count++;
}
// if 2 divides it
if (count > 0 ) {
System.out.println( "2" + " " + count);
}
// check for all the possible
// numbers that can divide it
for ( long i = 3 ; i <= ( long ) Math.sqrt(n); i += 2 ) {
count = 0 ;
while (n % i == 0 ) {
count++;
n = n / i;
}
if (count > 0 ) {
System.out.println(i + " " + count);
}
}
// if n at the end is a prime number.
if (n > 2 ) {
System.out.println(n + " " + "1" );
}
}
public static void main(String[] args) {
long n = 1000000000000000000L;
factorize(n);
}
} /*This code is contributed by 29AjayKumar*/ |
# Python3 program to print prime factors # and their powers. import math
# Function to calculate all the prime # factors and count of every prime factor def factorize(n):
count = 0 ;
# count the number of
# times 2 divides
while ((n % 2 > 0 ) = = False ):
# equivalent to n = n / 2;
n >> = 1 ;
count + = 1 ;
# if 2 divides it
if (count > 0 ):
print ( 2 , count);
# check for all the possible
# numbers that can divide it
for i in range ( 3 , int (math.sqrt(n)) + 1 ):
count = 0 ;
while (n % i = = 0 ):
count + = 1 ;
n = int (n / i);
if (count > 0 ):
print (i, count);
i + = 2 ;
# if n at the end is a prime number.
if (n > 2 ):
print (n, 1 );
# Driver Code n = 1000000000000000000 ;
factorize(n); # This code is contributed by mits |
// C# program to print prime // factors and their powers. using System;
public class GFG
{ // function to calculate all the // prime factors and count of // every prime factor static void factorize( long n)
{ int count = 0;
// count the number of times 2 divides
while (! (n % 2 > 0))
{
// equivalent to n=n/2;
n >>= 1;
count++;
}
// if 2 divides it
if (count > 0)
Console.WriteLine( "2" + " " +count);
// check for all the possible
// numbers that can divide it
for ( long i = 3; i <= ( long )
Math.Sqrt(n); i += 2)
{
count = 0;
while (n % i == 0) {
count++;
n = n / i;
}
if (count > 0)
Console.WriteLine(i + " " + count);
}
// if n at the end is a prime number.
if (n > 2)
Console.WriteLine(n + " " + "1" );
} // Driver Code
static public void Main ()
{
long n = 1000000000000000000;
factorize(n);
}
} // This code is contributed by vt_m. |
<?php // PHP program to print prime // factors and their powers. // function to calculate all // the prime factors and count // of every prime factor function factorize( $n )
{ $count = 0;
// count the number of
// times 2 divides
while (!( $n % 2))
{
// equivalent to n = n / 2;
$n >>= 1;
$count ++;
}
// if 2 divides it
if ( $count )
echo (2 . " " . $count . "\n" );
// check for all the possible
// numbers that can divide it
for ( $i = 3; $i <= sqrt( $n ); $i += 2)
{
$count = 0;
while ( $n % $i == 0)
{
$count ++;
$n = $n / $i ;
}
if ( $count )
echo ( $i . " " . $count );
}
// if n at the end is a prime number.
if ( $n > 2)
echo ( $n . " " . 1);
} // Driver Code $n = 1000000000000000000;
factorize( $n );
// This code is contributed by Ajit. ?> |
<script> // JavaScript program to print prime factors and their // powers. // function to calculate all the prime factors and // count of every prime factor function factorize(n)
{ var count = 0;
// count the number of times 2 divides
while ((n % 2)==0) {
n = parseInt(n/2) // equivalent to n=n/2;
count++;
}
// if 2 divides it
if (count)
document.write( 2 + " " + count + "<br>" );
// check for all the possible numbers that can
// divide it
for ( var i = 3; i <= parseInt(Math.sqrt(n)); i += 2) {
count = 0;
while (n % i == 0) {
count++;
n = parseInt(n / i);
}
if (count!=0)
document.write( i + " " + count + "<br>" );
}
// if n at the end is a prime number.
if (n > 2)
document.write( n + " " + 1 + "<br>" );
} // driver program to test the above function var n = 1000000000000000000;
factorize(n); </script> |
Output:
2 18 5 18
Time Complexity: O(sqrt(N)), as we are using a loop to traverse sqrt(N) times.
Auxiliary Space: O(1), as we are not using any extra space.