Given an integer . The task is to find the superpower from the factorization of .
The Superpower is the highest power among the power of primes in the factorisation of a number n.
Examples:
Input : n = 32
Output : 5
Input : n = 240
Output : 4
For finding the superpower of any given number , we have to complete the factorisation of n, and find out highest power among all of the prime factors.
Note: Using Sieve for the purpose of storing list of primes is useful in terms of optimization.
Algorithm :
- Iterate over primes and calculate the factorization of n.
- For each prime among the stored list of primes and which is also a factor of n,
find its power and check it for super power.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
#define MAX 100000
using namespace std;
bool prime[100002];
void SieveOfEratosthenes()
{
memset (prime, true , sizeof (prime));
for ( int p = 2; p * p <= MAX; p++)
if (prime[p] == true )
for ( int i = p * 2; i <= MAX; i += p)
prime[i] = false ;
}
int superpower( int n)
{
SieveOfEratosthenes();
int superPower = 0, factor = 0;
int i = 2;
while (n > 1 && i <= MAX) {
if (prime[i]) {
factor = 0;
while (n % i == 0 && n > 1) {
factor++;
n = n / i;
}
if (superPower < factor)
superPower = factor;
}
i++;
}
return superPower;
}
int main()
{
int n = 256;
cout << superpower(n);
return 0;
}
|
Java
class GFG{
static int MAX= 100000 ;
static boolean [] prime= new boolean [ 100002 ];
static void SieveOfEratosthenes()
{
for ( int p = 2 ; p * p <= MAX; p++)
if (prime[p] == false )
for ( int i = p * 2 ; i <= MAX; i += p)
prime[i] = true ;
}
static int superpower( int n)
{
SieveOfEratosthenes();
int superPower = 0 , factor = 0 ;
int i = 2 ;
while (n > 1 && i <= MAX) {
if (!prime[i]) {
factor = 0 ;
while (n % i == 0 && n > 1 ) {
factor++;
n = n / i;
}
if (superPower < factor)
superPower = factor;
}
i++;
}
return superPower;
}
public static void main(String[] args)
{
int n = 256 ;
System.out.println(superpower(n));
}
}
|
Python3
MAX = 100000 ;
prime = [ True ] * 100002 ;
def SieveOfEratosthenes():
p = 2 ;
while (p * p < = MAX ):
if (prime[p] = = True ):
i = p * 2 ;
while (i < = MAX ):
prime[i] = False ;
i + = p;
p + = 1 ;
def superpower(n):
SieveOfEratosthenes();
superPower = 0 ;
factor = 0 ;
i = 2 ;
while (n > 1 and i < = MAX ):
if (prime[i]):
factor = 0 ;
while (n % i = = 0 and n > 1 ):
factor + = 1 ;
n = int (n / i);
if (superPower < factor):
superPower = factor;
i + = 1 ;
return superPower;
n = 256 ;
print (superpower(n));
|
C#
class GFG
{
static int MAX = 100000;
static bool [] prime = new bool [100002];
static void SieveOfEratosthenes()
{
for ( int p = 2;
p * p <= MAX; p++)
if (prime[p] == false )
for ( int i = p * 2;
i <= MAX; i += p)
prime[i] = true ;
}
static int superpower( int n)
{
SieveOfEratosthenes();
int superPower = 0, factor = 0;
int i = 2;
while (n > 1 && i <= MAX)
{
if (!prime[i])
{
factor = 0;
while (n % i == 0 && n > 1)
{
factor++;
n = n / i;
}
if (superPower < factor)
superPower = factor;
}
i++;
}
return superPower;
}
static void Main()
{
int n = 256;
System.Console.WriteLine(superpower(n));
}
}
|
PHP
<?php
$MAX = 100000;
$prime = array_fill (0, 100002, true);
function SieveOfEratosthenes()
{
global $MAX , $prime ;
for ( $p = 2; $p * $p <= $MAX ; $p ++)
if ( $prime [ $p ] == true)
for ( $i = $p * 2;
$i <= $MAX ; $i += $p )
$prime [ $i ] = false;
}
function superpower( $n )
{
SieveOfEratosthenes();
global $MAX , $prime ;
$superPower = 0;
$factor = 0;
$i = 2;
while ( $n > 1 && $i <= $MAX )
{
if ( $prime [ $i ])
{
$factor = 0;
while ( $n % $i == 0 && $n > 1)
{
$factor ++;
$n = $n / $i ;
}
if ( $superPower < $factor )
$superPower = $factor ;
}
$i ++;
}
return $superPower ;
}
$n = 256;
echo superpower( $n );
?>
|
Javascript
<script>
var MAX = 100000;
var prime = Array(100002).fill( true );
function SieveOfEratosthenes()
{
for ( var p = 2; p * p <= MAX; p++)
if (prime[p] == true )
for ( var i = p * 2; i <= MAX; i += p)
prime[i] = false ;
}
function superpower(n)
{
SieveOfEratosthenes();
var superPower = 0, factor = 0;
var i = 2;
while (n > 1 && i <= MAX) {
if (prime[i]) {
factor = 0;
while (n % i == 0 && n > 1) {
factor++;
n = n / i;
}
if (superPower < factor)
superPower = factor;
}
i++;
}
return superPower;
}
var n = 256;
document.write( superpower(n));
</script>
|
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 neveropen!