# Number of perfect squares between two given numbers

• Difficulty Level : Easy
• Last Updated : 02 Jun, 2022

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

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

## 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 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 review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.