Dudeney Numbers

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 numberbool 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 codeint main(){ int n = 17576; if (isDudeney(n)) cout << "Yes"; else cout << "No"; return 0;} |
Java
// Java implementation of the approachimport java.lang.Math;class GFG{ // Function that returns true if// n is a Dudeney numberstatic 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 codepublic 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 numberdef 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 codeif __name__ == '__main__': n = 17576 if isDudeney(n): print("Yes") else: print("No") |
C#
// C# implementation of the approachusing System;class GFG{ // Function that returns true if// n is a Dudeney numberstatic 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 codepublic 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 numberfunction 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 codelet 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)
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 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



