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

• Difficulty Level : Medium
• Last Updated : 23 Jun, 2022

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 ( O(1) approach here ), 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++

 `// C++ implementation of the approach``#include ``#include ``using` `namespace` `std;` `// Function that returns true if the eventual``// digit sum of number nm is 1``bool` `isDigitSumOne(``int` `nm)``{``   ``//if reminder will 1``   ``//then eventual sum is 1``    ``if` `(nm % 9 == 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;``}`

## Java

 `// Java implementation of the approach``class` `GFG {` `    ``// Function that returns true if the eventual``    ``// digit sum of number nm is 1``    ``static` `boolean` `isDigitSumOne(``int` `nm)``    ``{` `      ``//if reminder will 1``      ``//then eventual sum is 1``      ``if` `(nm % ``9` `== ``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);``    ``}``}`

## Python

 `# Python3 implementation of the approach``import` `math` `# Function that returns true if the eventual``# digit sum of number nm is 1``def` `isDigitSumOne(nm) :``   ``#if reminder will 1``   ``#then eventual sum is 1``    ``if``(nm ``%` `9` `=``=` `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)`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``    ``// Function that returns true if the``    ``// eventual digit sum of number nm is 1``    ``static` `bool` `isDigitSumOne(``int` `nm)``    ``{` `     ``//if reminder will 1``     ``//then eventual sum is 1``      ``if` `(nm % 9 == 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`

## PHP

 `= 1 && ``\$cube` `<= ``\$n` `&&``                    ``isDigitSumOne(``\$cube``))``            ``echo` `\$cube``, ``" "``;``    ``}``}` `// Driver code``\$n` `= 1000;``printValidNums(``\$n``);` `// This code is contributed by Ryuga``?>`

## Javascript

 ``

Output:

`1 64 343 1000`

Time Complexity: O(cbrt(n))

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up