给定两个给定的数字a和b ,其中1 <= a <= b,找到a和b之间的完美立方数(包括a和b)。
例子:
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
方法1 :一种幼稚的方法是检查a和b之间的所有数字(包括a和b),并且每当遇到一个完美的立方体时,将计数加一。
下面是上述想法的实现:
CPP
// A Simple Method to count cubes between a and b
#include
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;
}
Java
// 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
Python3
# 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
C#
// 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
Javascript
C++
// An Efficient Method to count cubes between a and b
#include
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;
}
Java
// 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
Python3
# 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
C#
// 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
Javascript
输出:
Count of Cubes is 2
方法2(高效) :我们可以简单地将’a’的立方根和’b’的立方根以及将’a’的圆角立方根和’b’的圆角立方取下,并使用以下方法计算它们之间的理想立方体:
(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.
下面是上述想法的实现:
C++
// An Efficient Method to count cubes between a and b
#include
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;
}
Java
// 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
Python3
# 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
C#
// 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
Java脚本
输出:
Count of cubes is 2
时间复杂度:O(Log b)。