# Number of perfect squares between two given numbers

Given two given numbers a and b where 1<=a<=b, find the number of perfect squares between a and b (a and b inclusive).
Examples

```Input :  a = 3, b = 8
Output : 1
The only perfect square in given range is 4.

Input : a = 9, b = 25
Output : 3
The three perfect squares in given range are 9,
16 and 25```
Recommended Practice

Below is the implementation of above idea :

## C++

 `// A Simple Method to count squares between a and b` `#include ` `using` `namespace` `std;`   `int` `countSquares(``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` `        ``// square` `        ``for` `(``int` `j = 1; j * j <= i; j++)` `            ``if` `(j * j == i)` `                ``cnt++;`   `    ``return` `cnt;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `a = 9, b = 25;` `    ``cout << ``"Count of squares is "` `         ``<< countSquares(a, b);` `    ``return` `0;` `}`

## Java

 `// Java program to count squares between a and b` `class` `CountSquares {`   `    ``static` `int` `countSquares(``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` `            ``// square` `            ``for` `(``int` `j = ``1``; j * j <= i; j++)` `                ``if` `(j * j == i)` `                    ``cnt++;` `        ``return` `cnt;` `    ``}` `}`   `// Driver Code` `public` `class` `PerfectSquares {` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `a = ``9``, b = ``25``;` `        ``CountSquares obj = ``new` `CountSquares();` `        ``System.out.print(``"Count of squares is "` `+ obj.countSquares(a, b));` `    ``}` `}`

## Python3

 `# Python program to count squares between a and b`   `def` `CountSquares(a, b):`   `    ``cnt ``=` `0` `# initialize result`   `    ``# Traverse through all numbers` `    ``for` `i ``in` `range` `(a, b ``+` `1``):` `        ``j ``=` `1``;` `        ``while` `j ``*` `j <``=` `i:` `            ``if` `j ``*` `j ``=``=` `i:` `                 ``cnt ``=` `cnt ``+` `1` `            ``j ``=` `j ``+` `1` `        ``i ``=` `i ``+` `1` `    ``return` `cnt`   `# Driver Code` `a ``=` `9` `b ``=` `25` `print` `(``"Count of squares is:"``, CountSquares(a, b))`

## C#

 `// C# program to count squares` `// between a and b` `using` `System;`   `class` `GFG {`   `    ``// Function to count squares` `    ``static` `int` `countSquares(``int` `a, ``int` `b)` `    ``{` `        ``// Initialize result` `        ``int` `cnt = 0;`   `        ``// Traverse through all numbers` `        ``for` `(``int` `i = a; i <= b; i++)`   `            ``// Check if current number` `            ``// 'i' is perfect square` `            ``for` `(``int` `j = 1; j * j <= i; j++)` `                ``if` `(j * j == i)` `                    ``cnt++;` `        ``return` `cnt;` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `a = 9, b = 25;` `        ``Console.Write(``"Count of squares is "` `+ countSquares(a, b));` `    ``}` `}`   `// This code is contributed by Sam007`

## PHP

 ``

## Javascript

 ``

Output

`Count of squares is 3`

An upper bound on time Complexity of this solution is O((b-a) * sqrt(b)).
Method 2 (Efficient) We can simply take square root of ‘a’ and square root of ‘b’ and count the perfect squares between them using

```floor(sqrt(b)) - ceil(sqrt(a)) + 1

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

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

For example, let b = 24, a = 8.  floor(sqrt(b)) = 4,
ceil(sqrt(a)) = 3.  And number of squares is 4 - 3 + 1
= 2. The two numbers are 9 and 16.```

Below is the implementation of above idea :

## C++

 `// An Efficient Method to count squares between a and b` `#include ` `using` `namespace` `std;`   `// An efficient solution to count square between a` `// and b` `int` `countSquares(``int` `a, ``int` `b)` `{` `    ``return` `(``floor``(``sqrt``(b)) - ``ceil``(``sqrt``(a)) + 1);` `}`   `// Driver code` `int` `main()` `{` `    ``int` `a = 9, b = 25;` `    ``cout << ``"Count of squares is "` `         ``<< countSquares(a, b);` `    ``return` `0;` `}`

## Java

 `// An Efficient method to count squares between` `// a and b` `class` `CountSquares {` `    ``double` `countSquares(``int` `a, ``int` `b)` `    ``{` `        ``return` `(Math.floor(Math.sqrt(b)) - Math.ceil(Math.sqrt(a)) + ``1``);` `    ``}` `}`   `// Driver Code` `public` `class` `PerfectSquares {` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `a = ``9``, b = ``25``;` `        ``CountSquares obj = ``new` `CountSquares();` `        ``System.out.print(``"Count of squares is "` `+ (``int``)obj.countSquares(a, b));` `    ``}` `}`

## Python3

 `# An Efficient Method to count squares between a` `# and b` `import` `math` `def` `CountSquares(a, b):` `    ``return` `(math.floor(math.sqrt(b)) ``-` `math.ceil(math.sqrt(a)) ``+` `1``)`   `# Driver Code` `a ``=` `9` `b ``=` `25` `print` `(``"Count of squares is:"``, ``int``(CountSquares(a, b)))`

## C#

 `// C# program for efficient method` `// to count squares between a & b` `using` `System;`   `class` `GFG {`   `    ``// Function to count squares` `    ``static` `double` `countSquares(``int` `a, ``int` `b)` `    ``{` `        ``return` `(Math.Floor(Math.Sqrt(b)) - Math.Ceiling(Math.Sqrt(a)) + 1);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int` `a = 9, b = 25;` `        ``Console.Write(``"Count of squares is "` `+ (``int``)countSquares(a, b));` `    ``}` `}`   `// This code is contributed by Sam007.`

## PHP

 ``

## Javascript

 ``

Output

`Count of squares is 3`

Time Complexity: O(logn)

Auxiliary Space: O(1)
Time complexity of this solution is O(Log b). A typical implementation of square root for a number n takes time equal to O(Log n) [See this for a sample implementation of square root]

If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.