Number of perfect cubes between two given numbers - GeeksforGeeks

26 Nov, 2021
Given two given numbers a and b where 1<=a<=b, find the number of perfect cubes between a and b (a and b inclusive).Examples:  
Input :  a = 3, b = 16
Output : 1
The only perfect cube in given range is 8.

Input : a = 7, b = 30
Output : 2
The two cubes in given range are 8, 
and 27
 
 
Method 1 : One naive approach is to check all the numbers between a and b (inclusive a and b) and increase count by one whenever we encounter a perfect cube.
Below is the implementation of above idea:  
CPP
Java
Python3
C#
Javascript
// A Simple Method to count cubes between a and b#include <bits/stdc++.h>using namespace std; // Function to count cubes between two numbersint countCubes(int a, int b){    int cnt = 0; // Initialize result     // Traverse through all numbers    for (int i = a; i <= b; i++)         // Check if current number 'i' is perfect        // cube        for (int j = 1; j * j * j <= i; j++)            if (j * j * j == i)                cnt++;     return cnt;} // Driver codeint main(){    int a = 7, b = 30;    cout << "Count of Cubes is "         << countCubes(a, b);    return 0;}
// A Simple Method to count cubes between a and b class GFG{  // Function to count cubes between two numbersstatic int countCubes(int a, int b){    int cnt = 0; // Initialize result      // Traverse through all numbers    for (int i = a; i <= b; i++)          // Check if current number 'i' is perfect        // cube        for (int j = 1; j * j * j <= i; j++)            if (j * j * j == i)                cnt++;      return cnt;}  // Driver codepublic static void main(String[] args){    int a = 7, b = 30;    System.out.print("Count of Cubes is "         + countCubes(a, b));}} // This code is contributed by 29AjayKumar
# A Simple Method to count cubes between a and b  # Function to count cubes between two numbersdef countCubes(a, b):    cnt = 0 # Initialize result      # Traverse through all numbers    for i in range(a,b+1):          # Check if current number 'i' is perfect        # cube        for j in range(i+1):            if j*j*j>i:                break            if j * j * j == i:                cnt+=1      return cnt  # Driver codeif __name__ == '__main__':    a = 7    b = 30    print("Count of Cubes is ",countCubes(a, b)) # This code is contributed by mohit kumar 29
// A Simple Method to count cubes between a and busing System; class GFG{   // Function to count cubes between two numbersstatic int countCubes(int a, int b){    int cnt = 0; // Initialize result       // Traverse through all numbers    for (int i = a; i <= b; i++)           // Check if current number 'i' is perfect        // cube        for (int j = 1; j * j * j <= i; j++)            if (j * j * j == i)                cnt++;       return cnt;}   // Driver codepublic static void Main(){    int a = 7, b = 30;    Console.Write("Count of Cubes is "         + countCubes(a, b));}}  // This code is contributed by chitranayal
<script>// JavaScript program to count cubes between a and b      // Function to count cubes between two numbers    function countCubes(a, b)    {        let cnt = 0; // Initialize result           // Traverse through all numbers        for (let i = a; i <= b; i++)               // Check if current number 'i' is perfect            // cube            for (let j = 1; j * j * j <= i; j++)                if (j * j * j == i)                    cnt++;           return cnt;    }       // Driver code     let a = 7, b = 30;    document.write("Count of Cubes is " + countCubes(a, b));  // This code is contributed by Surbhi Tyagi </script>
Count of Cubes is 2
 
Time Complexity: O((b – a)4/3)
Auxiliary Space: O(1)
Method 2 (Efficient): We can simply take cube root of ‘a’ and cube root of ‘b’ and Round cube root of ‘a’ up and cube root of ‘b’ down and count the perfect cubes between them using:  
(floor(cbrt(b)) - ceil(cbrt(a)) + 1)

We take floor of cbrt(b) because we need to consider 
numbers before b.

We take ceil of cbrt(a) because we need to consider 
numbers after a.


For example, let b = 28, a = 7.  floor(cbrt(b)) = 3, 
ceil(cbrt(a)) = 2.  And number of cubes is 3 - 2 + 1
= 2. The two numbers are 8 and 27.
Below is the implementation of above idea : 
C++
Java
Python3
C#
Javascript
// An Efficient Method to count cubes between a and b#include <bits/stdc++.h>using namespace std; // Function to count cubes between two numbersint countCubes(int a, int b){    return (floor(cbrt(b)) - ceil(cbrt(a)) + 1);} // Driver codeint main(){    int a = 7, b = 28;    cout << "Count of cubes is "         << countCubes(a, b);    return 0;}
// An Efficient Method to count cubes between a and bclass GFG{ // Function to count cubes between two numbersstatic int countCubes(int a, int b){    return (int) (Math.floor(Math.cbrt(b)) -                Math.ceil(Math.cbrt(a)) + 1);} // Driver codepublic static void main(String[] args){    int a = 7, b = 28;    System.out.print("Count of cubes is "        + countCubes(a, b));}} // This code is contributed by 29AjayKumar
# An Efficient Method to count cubes between a and bfrom math import * # Function to count cubes between two numbersdef countCubes(a, b):         return (floor(b **(1./3.)) - ceil(a **(1./3.)) + 1) # Driver codea = 7b = 28print("Count of cubes is",countCubes(a, b)) # This code is contributed by shubhamsingh10
// An Efficient Method to count cubes between a and b// C# implementation of the above approachusing System; class GFG{ // Function to count cubes between two numbersstatic int countCubes(int a, int b){    return (int) (Math.Floor(Math.Cbrt(b)) -                Math.Ceiling(Math.Cbrt(a)) + 1);} // Driver codepublic static void Main(string[] args){    int a = 7, b = 28;    Console.WriteLine("Count of cubes is " + countCubes(a, b));}} // This code is contributed by Yash_R
<script> // An Efficient Method to count cubes between a and b // Function to count cubes between two numbersfunction countCubes(a, b){         return (Math.floor(b **(1./3.)) - Math.ceil(a **(1./3.)) + 1)} // Driver codelet a = 7;let b = 28;document.write("Count of cubes is "+countCubes(a, b)) // This code is contributed// by pulamolu mohan pavan cse</script>
Count of cubes is 2
 
Time Complexity: O(Log b).
Auxiliary Space: O(1) 
mohit kumar 29
29AjayKumar
ukasp
SHUBHAMSINGH10
Yash_R
surbhityagi15
pulamolusaimohan
simmytarika5
souravmahato348
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program to find GCD or HCF of two numbers
Program for Decimal to Binary Conversion
Sieve of Eratosthenes
Find all factors of a natural number | Set 1
Program to find sum of elements in a given array
The Knight's tour problem | Backtracking-1
Program for factorial of a number