# 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 in given range is 4.

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

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

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 square.

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)); ` `    ``} ` `} `

## Python

 `# 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

 ` `

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)); ` `    ``} ` `} `

## Python

 `# 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

 ` `

Output :

`Count of squares is 3`

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]

This article is contributed by Rahul Aggarwal. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Improved By : Sam007, jit_t, nitin mittal

Article Tags :
Practice Tags :

3

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