Open In App

Dudeney Numbers

Last Updated : 09 Jun, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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 = 27

Input: 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)



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads