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> |
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!

… [Trackback]
[…] There you will find 97394 additional Info to that Topic: geeksforgeeks.org/dudeney-numbers/ […]