Powerful Number
Last Updated :
11 Sep, 2023
A number n is said to be Powerful Number if for every prime factor p of it, p2 also divides it. For example:- 36 is a powerful number. It is divisible by both 3 and square of 3 i.e, 9.
The first few Powerful Numbers are:
1, 4, 8, 9, 16, 25, 27, 32, 36, 49, 64 ….
Given a number n, our task is to check if this is powerful or not.
Examples :
Input: 27
Output: YES
Input: 32
Output: YES
Input: 12
Output: NO
Approach:
The idea is based on the fact that if a number n is powerful, then all prime factors of it and their squares should be divisible by n. We find all prime factors of given number. And for every prime factor, we find the highest power of it that divides n. If we find a prime factor whose highest dividing power is 1, we return false. If highest dividing power of all prime factors is more than 1, we return true.
Below is implementation of above idea.
C++
#include <bits/stdc++.h>
using namespace std;
bool isPowerful( int n)
{
while (n % 2 == 0) {
int power = 0;
while (n % 2 == 0) {
n /= 2;
power++;
}
if (power == 1)
return false ;
}
for ( int factor = 3; factor <= sqrt (n); factor += 2) {
int power = 0;
while (n % factor == 0) {
n = n / factor;
power++;
}
if (power == 1)
return false ;
}
return (n == 1);
}
int main()
{
isPowerful(20) ? cout << "YES\n" : cout << "NO\n" ;
isPowerful(27) ? cout << "YES\n" : cout << "NO\n" ;
return 0;
}
|
Java
class GFG {
static boolean isPowerful( int n)
{
while (n % 2 == 0 ) {
int power = 0 ;
while (n % 2 == 0 ) {
n /= 2 ;
power++;
}
if (power == 1 )
return false ;
}
for ( int factor = 3 ; factor <= Math.sqrt(n); factor += 2 ) {
int power = 0 ;
while (n % factor == 0 ) {
n = n / factor;
power++;
}
if (power == 1 )
return false ;
}
return (n == 1 );
}
public static void main(String[] args)
{
if (isPowerful( 20 ))
System.out.print( "YES\n" );
else
System.out.print( "NO\n" );
if (isPowerful( 27 ))
System.out.print( "YES\n" );
else
System.out.print( "NO\n" );
}
}
|
Python3
import math
def isPowerful(n):
while (n % 2 = = 0 ):
power = 0
while (n % 2 = = 0 ):
n = n / / 2
power = power + 1
if (power = = 1 ):
return False
for factor in range ( 3 , int (math.sqrt(n)) + 1 , 2 ):
power = 0
while (n % factor = = 0 ):
n = n / / factor
power = power + 1
if (power = = 1 ):
return false
return (n = = 1 )
print ( "YES" if isPowerful( 20 ) else "NO" )
print ( "YES" if isPowerful( 27 ) else "NO" )
|
C#
using System;
class GFG {
static bool isPowerful( int n)
{
while (n % 2 == 0) {
int power = 0;
while (n % 2 == 0) {
n /= 2;
power++;
}
if (power == 1)
return false ;
}
for ( int factor = 3; factor <= Math.Sqrt(n); factor += 2) {
int power = 0;
while (n % factor == 0) {
n = n / factor;
power++;
}
if (power == 1)
return false ;
}
return (n == 1);
}
public static void Main()
{
if (isPowerful(20))
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
if (isPowerful(27))
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
}
}
|
PHP
<?php
function isPowerful( $n )
{
while ( $n % 2 == 0)
{
$power = 0;
while ( $n % 2 == 0)
{
$n /= 2;
$power ++;
}
if ( $power == 1)
return false;
}
for ( $factor = 3;
$factor <= sqrt( $n );
$factor += 2)
{
$power = 0;
while ( $n % $factor == 0)
{
$n = $n / $factor ;
$power ++;
}
if ( $power == 1)
return false;
}
return ( $n == 1);
}
$d = isPowerful(20) ?
"YES\n" :
"NO\n" ;
echo $d ;
$d = isPowerful(27) ?
"YES\n" :
"NO\n" ;
echo $d ;
?>
|
Javascript
<script>
function isPowerful(n)
{
while (n % 2 == 0) {
let power = 0;
while (n % 2 == 0) {
n /= 2;
power++;
}
if (power == 1)
return false ;
}
for (let factor = 3; factor <= Math.sqrt(n); factor += 2) {
let power = 0;
while (n % factor == 0) {
n = n / factor;
power++;
}
if (power == 1)
return false ;
}
return (n == 1);
}
if (isPowerful(20))
document.write( "YES" + "<br>" );
else
document.write( "NO" + "<br>" );
if (isPowerful(27))
document.write( "YES" + "<br>" );
else
document.write( "NO" + "<br>" );
</script>
|
Time complexity: O(sqrt(n))
Auxiliary space: O(1)
References:
https://en.wikipedia.org/wiki/Powerful_number
Share your thoughts in the comments
Please Login to comment...