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 ( 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++
#include <cmath>
#include <iostream>
using namespace std;
bool isDigitSumOne( int nm)
{
if (nm % 9 == 1)
return true ;
else
return false ;
}
void printValidNums( int n)
{
int cbrt_n = ( int )cbrt(n);
for ( int i = 1; i <= cbrt_n; i++) {
int cube = pow (i, 3);
if (cube >= 1 && cube <= n && isDigitSumOne(cube))
cout << cube << " " ;
}
}
int main()
{
int n = 1000;
printValidNums(n);
return 0;
}
|
Java
class GFG {
static boolean isDigitSumOne( int nm)
{
if (nm % 9 == 1 )
return true ;
else
return false ;
}
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 (cube >= 1 && cube <= n && isDigitSumOne(cube))
System.out.print(cube + " " );
}
}
public static void main(String args[])
{
int n = 1000 ;
printValidNums(n);
}
}
|
Python
import math
def isDigitSumOne(nm) :
if (nm % 9 = = 1 ):
return True
else :
return False
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 = " " )
n = 1000
printValidNums(n)
|
C#
using System;
class GFG
{
static bool isDigitSumOne( int nm)
{
if (nm % 9 == 1)
return true ;
else
return false ;
}
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 (cube >= 1 && cube <= n &&
isDigitSumOne(cube))
Console.Write(cube + " " );
}
}
static public void Main ()
{
int n = 1000;
printValidNums(n);
}
}
|
PHP
<?php
function isDigitSumOne( $nm )
{
if ( $nm % 9 == 1)
return true;
else
return false;
}
function printValidNums( $n )
{
$cbrt_n = ceil (pow( $n ,1/3));
for ( $i = 1; $i <= $cbrt_n ; $i ++)
{
$cube = pow( $i , 3);
if ( $cube >= 1 && $cube <= $n &&
isDigitSumOne( $cube ))
echo $cube , " " ;
}
}
$n = 1000;
printValidNums( $n );
?>
|
Javascript
<script>
function isDigitSumOne(nm)
{
if (nm % 9 == 1)
return true ;
else
return false ;
}
function printValidNums(n)
{
let cbrt_n = Math.ceil(Math.pow(n, 1 / 3));
for (let i = 1; i <= cbrt_n; i++)
{
let cube = Math.pow(i, 3);
if (cube >= 1 && cube <= n && isDigitSumOne(cube))
document.write(cube + " " );
}
}
let n = 1000;
printValidNums(n);
</script>
|
Time Complexity: O(cbrt(n))
Auxiliary Space: O(1)
Last Updated :
23 Jun, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...