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> |
Yes
Time Complexity: O(logn)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!