Check if a number is an Achilles number or not
Given a positive integer N. The task is to check if N is an Achilles number or not. Print ‘YES’ if N is an Achilles number else print ‘NO’.
Achilles number: In Mathematics, an Achilles number is a number that is powerful ( A number n is said to be Powerful Number if for every prime factor p of it, p2 also divides it ) but not a perfect power.
The first few Achilles number are-
72, 108, 200, 288, 392, 432, 500, 648, 675, 800, 864, 968, 972, 1125, 1152, 1323
Examples:
Input : 72
Output : YES
Explanation : 72 is powerful as 6 and 36 both divide it and it is not perfect square.
Input : 36
Output : NO
Explanation : 36 is powerful number but is perfect power.
Prerequisite:
Approach
- Check If the given number n is a powerful number or not. To check if a number is powerful or not refer this.
- Check if n is a perfect power or not. To know various approaches to check if a number is perfect power or not – refer this.
- If n is powerful but not perfect then, n is an Achilles Number
Otherwise Not.
Below is the 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);
}
bool isPower( int a)
{
if (a == 1)
return true ;
for ( int i = 2; i * i <= a; i++) {
double val = log (a) / log (i);
if ((val - ( int )val) < 0.00000001)
return true ;
}
return false ;
}
bool isAchillesNumber( int n)
{
if (isPowerful(n) && !isPower(n))
return true ;
else
return false ;
}
int main()
{
int n = 72;
if (isAchillesNumber(n))
cout << "YES" << endl;
else
cout << "NO" << endl;
n = 36;
if (isAchillesNumber(n))
cout << "YES" << endl;
else
cout << "NO" << endl;
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 );
}
static boolean isPower( int a)
{
if (a == 1 )
return true ;
for ( int i = 2 ; i * i <= a; i++) {
double val = Math.log(a) / Math.log(i);
if ((val - ( int )val) < 0.00000001 )
return true ;
}
return false ;
}
static boolean isAchillesNumber( int n)
{
if (isPowerful(n) && !isPower(n))
return true ;
else
return false ;
}
public static void main(String[] args)
{
int n = 72 ;
if (isAchillesNumber(n))
System.out.println( "YES" );
else
System.out.println( "NO" );
n = 36 ;
if (isAchillesNumber(n))
System.out.println( "YES" );
else
System.out.println( "NO" );
}
}
|
Python3
from math import sqrt, log
def isPowerful(n):
while (n % 2 = = 0 ):
power = 0
while (n % 2 = = 0 ):
n / = 2
power + = 1
if (power = = 1 ):
return False
p = int (sqrt(n)) + 1
for factor in range ( 3 , p, 2 ):
power = 0
while (n % factor = = 0 ):
n = n / factor
power + = 1
if (power = = 1 ):
return False
return (n = = 1 )
def isPower(a):
if (a = = 1 ):
return True
p = int (sqrt(a)) + 1
for i in range ( 2 , a, 1 ):
val = log(a) / log(i)
if ((val - int (val)) < 0.00000001 ):
return True
return False
def isAchillesNumber(n):
if (isPowerful(n) = = True and
isPower(n) = = False ):
return True
else :
return False
if __name__ = = '__main__' :
n = 72
if (isAchillesNumber(n)):
print ( "YES" )
else :
print ( "NO" )
n = 36
if (isAchillesNumber(n)):
print ( "YES" )
else :
print ( "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);
}
static bool isPower( int a)
{
if (a == 1)
return true ;
for ( int i = 2; i * i <= a; i++) {
double val = Math.Log(a) / Math.Log(i);
if ((val - ( int )val) < 0.00000001)
return true ;
}
return false ;
}
static bool isAchillesNumber( int n)
{
if (isPowerful(n) && !isPower(n))
return true ;
else
return false ;
}
public static void Main()
{
int n = 72;
if (isAchillesNumber(n))
Console.WriteLine( "YES" );
else
Console.WriteLine( "NO" );
n = 36;
if (isAchillesNumber(n))
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);
}
function isPower( $a )
{
if ( $a == 1)
return true;
for ( $i = 2; $i * $i <= $a ; $i ++)
{
$val = log( $a ) / log( $i );
if (( $val - (int) $val ) < 0.00000001)
return true;
}
return false;
}
function isAchillesNumber( $n )
{
if (isPowerful( $n ) && !isPower( $n ))
return true;
else
return false;
}
$n = 72;
if (isAchillesNumber( $n ))
echo "YES" , "\n" ;
else
echo "NO" , "\n" ;
$n = 36;
if (isAchillesNumber( $n ))
echo "YES" , "\n" ;
else
echo "NO" , "\n" ;
?>
|
Javascript
<script>
function isPowerful(n)
{
while (n % 2 == 0)
{
let power = 0;
while (n % 2 == 0)
{
n = parseInt(n / 2, 10);
power++;
}
if (power == 1)
return false ;
}
for (let factor = 3;
factor <= Math.sqrt(n);
factor += 2)
{
let power = 0;
while (n % factor == 0)
{
n = parseInt(n / factor, 10);
power++;
}
if (power == 1)
return false ;
}
return (n == 1);
}
function isPower(a)
{
if (a == 1)
return true ;
for (let i = 2; i * i <= a; i++)
{
let val = Math.log(a) / Math.log(i);
if ((val - parseInt(val, 10)) < 0.00000001)
return true ;
}
return false ;
}
function isAchillesNumber(n)
{
if (isPowerful(n) && !isPower(n))
return true ;
else
return false ;
}
let n = 72;
if (isAchillesNumber(n))
document.write( "YES" + "</br>" );
else
document.write( "NO" + "</br>" );
n = 36;
if (isAchillesNumber(n))
document.write( "YES" + "</br>" );
else
document.write( "NO" + "</br>" );
</script>
|
Time complexity: O(sqrt(n))
Auxiliary space: O(1)
Last Updated :
16 Oct, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...