Given an integer n, the task is to check if n is a Dudeney number or not. A Dudeney number is a positive integer that is a perfect cube such that the sum of its decimal digits is equal to the cube root of the number.
Examples:
Input: N = 19683
Output: Yes
19683 = 273 and 1 + 9 + 6 + 8 + 3 = 27Input: N = 75742
Output: No
Approach:
- Check if n is a perfect cube, if not then it cannot be a Dudeney number.
- If n is a perfect cube then calculate the sum of its digits. If the sum of it’s digits is equal to its cube root then it is a Dudeney number else it is not.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std;
// Function that returns true if // n is a Dudeney number bool isDudeney( int n)
{ int cube_rt = int (round(( pow (n, 1.0 / 3.0))));
// If n is not a perfect cube
if (cube_rt * cube_rt * cube_rt != n)
return false ;
int dig_sum = 0;
int temp = n;
while (temp > 0) {
// Last digit
int rem = temp % 10;
// Update the digit sum
dig_sum += rem;
// Remove the last digit
temp /= 10;
}
// If cube root of n is not equal to
// the sum of its digits
if (cube_rt != dig_sum)
return false ;
return true ;
} // Driver code int main()
{ int n = 17576;
if (isDudeney(n))
cout << "Yes" ;
else
cout << "No" ;
return 0;
} |
Java
// Java implementation of the approach import java.lang.Math;
class GFG
{ // Function that returns true if // n is a Dudeney number static boolean isDudeney( int n)
{ int cube_rt = ( int )(Math.round((Math.pow(n, 1.0 / 3.0 ))));
// If n is not a perfect cube
if (cube_rt * cube_rt * cube_rt != n)
return false ;
int dig_sum = 0 ;
int temp = n;
while (temp > 0 )
{
// Last digit
int rem = temp % 10 ;
// Update the digit sum
dig_sum += rem;
// Remove the last digit
temp /= 10 ;
}
// If cube root of n is not equal to
// the sum of its digits
if (cube_rt != dig_sum)
return false ;
return true ;
} // Driver code public static void main(String[] args)
{ int n = 17576 ;
if (isDudeney(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
} } // This code is contributed by Code_Mech. |
Python3
# Python implementation of the approach # Function that returns true if # n is a Dudeney number def isDudeney(n):
cube_rt = int ( round (( pow (n, 1.0 / 3.0 ))))
# If n is not a perfect cube
if cube_rt * cube_rt * cube_rt ! = n:
return False
dig_sum = 0
temp = n
while temp> 0 :
# Last digit
rem = temp % 10
# Update the digit sum
dig_sum + = rem
# Remove the last digit
temp / / = 10
# If cube root of n is not equal to
# the sum of its digits
if cube_rt ! = dig_sum:
return False
return True
# Driver code if __name__ = = '__main__' :
n = 17576
if isDudeney(n):
print ( "Yes" )
else :
print ( "No" )
|
C#
// C# implementation of the approach using System;
class GFG
{ // Function that returns true if // n is a Dudeney number static bool isDudeney( int n)
{ int cube_rt = ( int )(Math.Round((Math.Pow(n, 1.0 / 3.0))));
// If n is not a perfect cube
if (cube_rt * cube_rt * cube_rt != n)
return false ;
int dig_sum = 0;
int temp = n;
while (temp > 0)
{
// Last digit
int rem = temp % 10;
// Update the digit sum
dig_sum += rem;
// Remove the last digit
temp /= 10;
}
// If cube root of n is not equal to
// the sum of its digits
if (cube_rt != dig_sum)
return false ;
return true ;
} // Driver code public static void Main()
{ int n = 17576;
if (isDudeney(n))
Console.Write( "Yes" );
else
Console.Write( "No" );
} } // This code is contributed // by Akanksha Rai |
PHP
<?php // PHP implementation of the approach // Function that returns true if // n is a Dudeney number function isDudeney( $n )
{ $cube_rt = floor ( round ((pow( $n , 1.0 / 3.0))));
// If n is not a perfect cube
if ( $cube_rt * $cube_rt * $cube_rt != $n )
return false;
$dig_sum = 0;
$temp = $n ;
while ( $temp > 0)
{
// Last digit
$rem = $temp % 10;
// Update the digit sum
$dig_sum += $rem ;
// Remove the last digit
$temp = $temp /10;
}
// If cube root of n is not equal to
// the sum of its digits
if ( $cube_rt != $dig_sum )
return false;
return true;
} // Driver code $n = 17576;
if (isDudeney( $n ))
echo "Yes" ;
else echo "No" ;
// This code is contributed by Ryuga ?> |
Javascript
<script> // Javascript implementation of the approach // Function that returns true if // n is a Dudeney number function isDudeney(n)
{ let cube_rt = parseInt(
Math.round((Math.pow(n, 1.0 / 3.0))));
// If n is not a perfect cube
if (cube_rt * cube_rt * cube_rt != n)
return false ;
let dig_sum = 0;
let temp = n;
while (temp > 0)
{
// Last digit
let rem = temp % 10;
// Update the digit sum
dig_sum += rem;
// Remove the last digit
temp = parseInt(temp / 10);
}
// If cube root of n is not equal to
// the sum of its digits
if (cube_rt != dig_sum)
return false ;
return true ;
} // Driver code let n = 17576; if (isDudeney(n))
document.write( "Yes" );
else document.write( "No" );
// This code is contributed by souravmahato348 </script> |
Output:
Yes
Time Complexity: O(logn)
Auxiliary Space: O(1)