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++ implementation of the approach #include <cmath> #include <iostream> 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 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);
}
} |
# 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# 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 // PHP implementation of the approach // Function that returns true if the // eventual digit sum of number nm is 1 function 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 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 ?> |
<script> // Javascript implementation of the approach
// Function that returns true if the
// eventual digit sum of number nm is 1
function 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
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 it is the required perfect cube
if (cube >= 1 && cube <= n && isDigitSumOne(cube))
document.write(cube + " " );
}
}
let n = 1000;
printValidNums(n);
</script> |
1 64 343 1000
Time Complexity: O(cbrt(n))
Auxiliary Space: O(1)