Number of perfect squares between two given numbers

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++
Java
Python3
C#
PHP
Javascript
// A Simple Method to count squares between a and b#include <bits/stdc++.h>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 codeint main(){    int a = 9, b = 25;    cout << "Count of squares is "         << countSquares(a, b);    return 0;}
// Java program to count squares between a and bclass 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 Codepublic 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 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 Codea = 9b = 25print ("Count of squares is:", CountSquares(a, b))
// C# program to count squares// between a and busing 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// A Simple Method to count squares//between a and b function countSquares($a, $b){    $cnt = 0; // Initialize result     // Traverse through all numbers    for ($i = $a; $i <= $b; $i++)         // Check if current number        // 'i' is perfect square        for ($j = 1; $j * $j <= $i;                              $j++)            if ($j * $j == $i)                $cnt++;     return $cnt;} // Driver code     $a = 9; $b = 25;    echo "Count of squares is ".              countSquares($a, $b); // This code is contributed by ajit.?>
<script>// A Simple Method to count squares//between a and b function countSquares(a, b){   let cnt = 0;        // Traverse through all numbers    for (let i = a; i <= b; i++)         // Check if current number        // 'i' is perfect square        for (let j = 1; j * j <= i;j++)            if (j * j == i)                cnt++;     return cnt;} // Driver code     let a = 9;    let b = 25;    document.write( "Count of squares is ",              countSquares(a, b)); // This code is contributed by sravan.</script>
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++
Java
Python3
C#
PHP
Javascript
// An Efficient Method to count squares between a and b#include <bits/stdc++.h>using namespace std; // An efficient solution to count square between a// and bint countSquares(int a, int b){    return (floor(sqrt(b)) - ceil(sqrt(a)) + 1);} // Driver codeint main(){    int a = 9, b = 25;    cout << "Count of squares is "         << countSquares(a, b);    return 0;}
// An Efficient method to count squares between// a and bclass CountSquares {    double countSquares(int a, int b)    {        return (Math.floor(Math.sqrt(b)) - Math.ceil(Math.sqrt(a)) + 1);    }} // Driver Codepublic 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));    }}
# An Efficient Method to count squares between a# and bimport mathdef CountSquares(a, b):    return (math.floor(math.sqrt(b)) - math.ceil(math.sqrt(a)) + 1) # Driver Codea = 9b = 25print ("Count of squares is:", int(CountSquares(a, b)))
// C# program for efficient method// to count squares between a & busing 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// An Efficient PHP code to count// squares between a and b // Method to count square// between a and bfunction countSquares($a, $b){    return (floor(sqrt($b)) -            ceil(sqrt($a)) + 1);} // Driver code{    $a = 9;    $b = 25;    echo "Count of squares is ",           countSquares($a, $b);    return 0;}// This code is contributed by nitin mittal.?>
<script>// A Simple Method to count squares//between a and b function countSquares(a, b){   return (Math.floor(Math.sqrt(b)) -  Math.ceil(Math.sqrt(a)) + 1);} // Driver code     let a = 9;    let b = 25;    document.write( "Count of squares is ",              countSquares(a, b)); // This code is contributed by sravan.</script>
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.
 
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 
Sam007
jit_t
nitin mittal
sravankumar8128
amartyaniel20
saitej7
maths-perfect-square
Wipro
Mathematical
Wipro
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Operators in C / C++
Sieve of Eratosthenes
Prime Numbers
Program to find GCD or HCF of two numbers
Find minimum number of coins that make a given value
Minimum number of jumps to reach end
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Program for Decimal to Binary Conversion