Numbers less than N that are perfect cubes and the sum of their digits reduced to a single digit is 1

Given a number n, the task is to print all the numbers less than or equal to n which are perfect cubes as well as the eventual sum of their digits is 1.

Examples:

Input: n = 100
Output: 1 64
64 = 6 + 4 = 10 = 1 + 0 = 1
Input: n = 1000
Output: 1 64 343 1000

Approach: For every perfect cube less than or equal to n keep on calculating the sum of its digits until the number is reduced to a single digit, if this digit is 1 then print the perfect cube else skip to the next perfect cube below n until all the perfect cubes have been considered.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <cmath>
#include <iostream>
using namespace std;
  
// Functin that returns true if the eventual
// digit sum of number nm is 1
bool isDigitSumOne(int nm)
{
  
    // Loop till the sum is not single digit number
    while (nm > 9) {
  
        // Intitialize the sum as zero
        int sum_digit = 0;
  
        // Find the sum of digits
        while (nm > 0) {
            int digit = nm % 10;
            sum_digit = sum_digit + digit;
            nm = nm / 10;
        }
        nm = sum_digit;
    }
  
    // If sum is eventually 1
    if (nm == 1)
        return true;
    else
        return false;
}
  
// Function to print the required numbers
// less than n
void printValidNums(int n)
{
    int cbrt_n = (int)cbrt(n);
    for (int i = 1; i <= cbrt_n; i++) {
        int cube = pow(i, 3);
  
        // If it is the required perfect cube
        if (cube >= 1 && cube <= n && isDigitSumOne(cube))
            cout << cube << " ";
    }
}
  
// Driver code
int main()
{
    int n = 1000;
    printValidNums(n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
class GFG {
  
    // Functin that returns true if the eventual
    // digit sum of number nm is 1
    static boolean isDigitSumOne(int nm)
    {
  
        // Loop till the sum is not single digit number
        while (nm > 9) {
  
            // Intitialize the sum as zero
            int sum_digit = 0;
  
            // Find the sum of digits
            while (nm > 0) {
                int digit = nm % 10;
                sum_digit = sum_digit + digit;
                nm = nm / 10;
            }
            nm = sum_digit;
        }
  
        // If sum is eventually 1
        if (nm == 1)
            return true;
        else
            return false;
    }
  
    // Function to print the required numbers
    // less than n
    static void printValidNums(int n)
    {
        int cbrt_n = (int)Math.cbrt(n);
        for (int i = 1; i <= cbrt_n; i++) {
            int cube = (int)Math.pow(i, 3);
  
            // If it is the required perfect cube
            if (cube >= 1 && cube <= n && isDigitSumOne(cube))
                System.out.print(cube + " ");
        }
    }
  
    // Driver code
    public static void main(String args[])
    {
        int n = 1000;
        printValidNums(n);
    }
}

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
import math
  
# Functin that returns true if the eventual 
# digit sum of number nm is 1
def isDigitSumOne(nm) :
      
    # Loop till the sum is not single digit number
    while(nm>9) :
          
        # Intitialize the sum as zero
        sum_digit = 0
          
        # Find the sum of digits
        while(nm != 0) :
            digit = nm % 10
            sum_digit = sum_digit + digit
            nm = nm // 10
        nm = sum_digit
      
    # If sum is eventually 1
    if(nm == 1):
        return True
    else:
        return False
  
# Function to print the required numbers
# less than n
def printValidNums(n):
    cbrt_n = math.ceil(n**(1./3.))
    for i in range(1, cbrt_n + 1):
        cube = i * i * i
        if (cube >= 1 and cube <= n and isDigitSumOne(cube)):
            print(cube, end = " ")
              
  
# Driver code 
n = 1000
printValidNums(n)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
  
class GFG
{
    // Functin that returns true if the
    // eventual digit sum of number nm is 1
    static bool isDigitSumOne(int nm)
    {
  
        // Loop till the sum is not single 
        // digit number
        while (nm > 9) 
        {
  
            // Intitialize the sum as zero
            int sum_digit = 0;
  
            // Find the sum of digits
            while (nm > 0) 
            {
                int digit = nm % 10;
                sum_digit = sum_digit + digit;
                nm = nm / 10;
            }
            nm = sum_digit;
        }
  
        // If sum is eventually 1
        if (nm == 1)
            return true;
        else
            return false;
    }
  
    // Function to print the required 
    // numbers less than n
    static void printValidNums(int n)
    {
        int cbrt_n = (int)Math.Ceiling(Math.Pow(n, 
                                      (double) 1 / 3));
        for (int i = 1; i <= cbrt_n; i++) 
        {
            int cube = (int)Math.Pow(i, 3);
  
            // If it is the required perfect cube
            if (cube >= 1 && cube <= n && 
                             isDigitSumOne(cube))
                Console.Write(cube + " ");
        }
    }
  
    // Driver code
    static public void Main ()
    {
        int n = 1000;
        printValidNums(n);
    }
}
  
// This code is contributed by akt_mit 

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach 
  
// Functin that returns true if the 
// eventual digit sum of number nm is 1 
function isDigitSumOne($nm
  
    // Loop till the sum is not 
    // single digit number 
    while ($nm > 9) 
    
  
        // Intitialize the sum as zero 
        $sum_digit = 0; 
  
        // Find the sum of digits 
        while ($nm > 0)
        
            $digit = $nm % 10; 
            $sum_digit += $digit
            $nm = floor($nm / 10); 
        
        $nm = $sum_digit
    
  
    // If sum is eventually 1 
    if ($nm == 1) 
        return true; 
    else
        return false; 
  
// Function to print the required numbers 
// less than n 
function printValidNums($n
    $cbrt_n = ceil(pow($n,1/3)); 
    for ($i = 1; $i <= $cbrt_n; $i++) 
    
        $cube = pow($i, 3); 
  
        // If it is the required perfect cube 
        if ($cube >= 1 && $cube <= $n && 
                    isDigitSumOne($cube)) 
            echo $cube, " "
    
  
// Driver code 
$n = 1000; 
printValidNums($n); 
  
// This code is contributed by Ryuga
?>

chevron_right


Output:

1 64 343 1000


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : jit_t, AnkitRai01