Number of perfect cubes between two given numbers

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

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Simple Method to count cubes between a and b
#include <bits/stdc++.h>
using namespace std;
  
// Function to count cubes between two numbers
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 code
int main()
{
    int a = 7, b = 30;
    cout << "Count of Cubes is "
         << countCubes(a, b);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Simple Method to count cubes between a and b
  
class GFG{
   
// Function to count cubes between two numbers
static 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 code
public 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# A Simple Method to count cubes between a and b
   
# Function to count cubes between two numbers
def 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 code
if __name__ == '__main__':
    a = 7
    b = 30
    print("Count of Cubes is ",countCubes(a, b))
  
# This code is contributed by mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// A Simple Method to count cubes between a and b
using System;
  
class GFG{
    
// Function to count cubes between two numbers
static 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 code
public static void Main()
{
    int a = 7, b = 30;
    Console.Write("Count of Cubes is "
         + countCubes(a, b));
}
}
   
// This code is conributed by chitranayal

chevron_right


Output:

Count of Cubes is 2

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// An Efficient Method to count cubes between a and b
#include <bits/stdc++.h>
using namespace std;
  
// Function to count cubes between two numbers
int countCubes(int a, int b)
{
    return (floor(cbrt(b)) - ceil(cbrt(a)) + 1);
}
  
// Driver code
int main()
{
    int a = 7, b = 28;
    cout << "Count of cubes is "
         << countCubes(a, b);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// An Efficient Method to count cubes between a and b
class GFG
{
  
// Function to count cubes between two numbers
static int countCubes(int a, int b)
{
    return (int) (Math.floor(Math.cbrt(b)) - 
                Math.ceil(Math.cbrt(a)) + 1);
}
  
// Driver code
public 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# An Efficient Method to count cubes between a and b
from math import *
  
# Function to count cubes between two numbers
def countCubes(a, b):
      
    return (floor(b **(1./3.)) - ceil(a **(1./3.)) + 1)
  
# Driver code
a = 7
b = 28
print("Count of cubes is",countCubes(a, b))
  
# This code is contributed by shubhamsingh10

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// An Efficient Method to count cubes between a and b
// C# implementation of the above approach
using System;
  
class GFG
{
  
// Function to count cubes between two numbers
static int countCubes(int a, int b)
{
    return (int) (Math.Floor(Math.Cbrt(b)) - 
                Math.Ceiling(Math.Cbrt(a)) + 1);
}
  
// Driver code
public 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

chevron_right


Output:

Count of cubes is 2

Time Complexity: O(Log b).




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.



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.