Count of perfect squares of given length

08 Apr, 2021
Given an integer N, the task is to find the number of perfect squares of length N.Examples: 
Input: N = 1 Output: 3 Explanation: The single digit perfect squares are 1, 4 and 9.Input: N = 2 Output: 6 Explanation: The two-digit perfect squares are 16, 25, 36, 49, 64 and 81. 
Naive Approach: In order to solve this problem, we can check all the numbers between 10( N – 1 ) and 10N – 1 and increment the counter whenever we encounter a perfect square.Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// C++ Program to count perfect// squares of given length #include <bits/stdc++.h>using namespace std; // Function to check if a// number is perfect squarebool isPerfectSquare(long double x){    // Find floating point value of    // square root of x.    long double sr = sqrt(x);     // If square root is an integer    return ((sr - floor(sr)) == 0);} // Function to return the count of// n digit perfect squaresint countSquares(int n){    // Initialize result    int cnt = 0;     // Traverse through all numbers    // of n digits    for (int i = pow(10, (n - 1));         i < pow(10, n); i++) {         // Check if current number        // 'i' is perfect square        if (i != 0 && isPerfectSquare(i))            cnt++;    }    return cnt;} // Driver codeint main(){    int n = 3;    cout << countSquares(n);    return 0;}
// Java Program to count perfect// squares of given lengthclass GFG{ // Function to check if a// number is perfect squarestatic boolean isPerfectSquare(double x){         // Find floating point value of    // square root of x.    double sr = Math.sqrt(x);     // If square root is an integer    return ((sr - Math.floor(sr)) == 0);} // Function to return the count of// n digit perfect squaresstatic int countSquares(int n){         // Initialize result    int cnt = 0;     // Traverse through all numbers    // of n digits    for(int i = (int) Math.pow(10, (n - 1));                  i < Math.pow(10, n); i++)    {         // Check if current number        // 'i' is perfect square        if (i != 0 && isPerfectSquare(i))            cnt++;    }    return cnt;} // Driver codepublic static void main(String[] args){    int n = 3;    System.out.print(countSquares(n));}} // This code is contributed by Rajput-Ji
# Python3 Program to count perfect# squares of given lengthimport math; # Function to check if a# number is perfect squaredef isPerfectSquare(x):     # Find floating point value of    # square root of x.    sr = math.sqrt(x);     # If square root is an integer    return ((sr - math.floor(sr)) == 0); # Function to return the count of# n digit perfect squaresdef countSquares(n):     # Initialize result    cnt = 0;     # Traverse through all numbers    # of n digits    for i in range(int(math.pow(10, (n - 1))),                   int(math.pow(10, n))):         # Check if current number        # 'i' is perfect square        if (i != 0 and isPerfectSquare(i)):            cnt += 1;         return cnt; # Driver coden = 3;print(countSquares(n)); # This code is contributed by Akanksha_Rai
// C# program to count perfect// squares of given lengthusing System; class GFG{ // Function to check if a// number is perfect squarestatic bool isPerfectSquare(double x){         // Find floating point value of    // square root of x.    double sr = Math.Sqrt(x);     // If square root is an integer    return ((sr - Math.Floor(sr)) == 0);} // Function to return the count of// n digit perfect squaresstatic int countSquares(int n){         // Initialize result    int cnt = 0;     // Traverse through all numbers    // of n digits    for(int i = (int) Math.Pow(10, (n - 1));                  i < Math.Pow(10, n); i++)    {        // Check if current number       // 'i' is perfect square       if (i != 0 && isPerfectSquare(i))           cnt++;    }    return cnt;} // Driver codepublic static void Main(String[] args){    int n = 3;         Console.Write(countSquares(n));}} // This code is contributed by sapnasingh4991
<script>// Javascript Program to count perfect// squares of given length // Function to check if a// number is perfect squarefunction isPerfectSquare(x){    // Find floating point value of    // square root of x.    let sr = Math.sqrt(x);     // If square root is an integer    return ((sr - Math.floor(sr)) == 0);} // Function to return the count of// n digit perfect squaresfunction countSquares(n){    // Initialize result    let cnt = 0;     // Traverse through all numbers    // of n digits    for (let i = Math.pow(10, (n - 1));         i < Math.pow(10, n); i++) {         // Check if current number        // 'i' is perfect square        if (i != 0 && isPerfectSquare(i))            cnt++;    }    return cnt;} // Driver codelet n = 3;document.write(countSquares(n)); // This code is contributed by subhammahato348.</script>
22
 
Efficient Approach: In order to solve this problem we can simply find the number of perfect squares of length N using a formula:
A number n has d digits if Hence, a perfect square n2 has d digits if or  Thus, the required answer for count of perfect squares of N digits is  
A number n has d digits if 
Hence, a perfect square n2 has d digits if or  
Thus, the required answer for count of perfect squares of N digits is  
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ Program to count// perfect squares of given length #include <bits/stdc++.h>using namespace std; // Function to return the count of// n digit perfect squaresint countSquares(int n){    int r = ceil(sqrt(pow(10, n)));    int l = ceil(sqrt(pow(10, n - 1)));    return r - l;} // Driver codeint main(){    int n = 3;    cout << countSquares(n);    return 0;}
// Java Program to count perfect// squares of given lengthclass GFG{ // Function to return the count// of n digit perfect squaresstatic int countSquares(int n){    int r = (int) Math.ceil(Math.sqrt                           (Math.pow(10, n)));    int l = (int) Math.ceil(Math.sqrt                           (Math.pow(10, n - 1)));    return r - l;} // Driver codepublic static void main(String[] args){    int n = 3;    System.out.print(countSquares(n));}} // This code is contributed by Rohit_ranjan
# Python3 program to count perfect # squares of given lengthimport math # Function to return the count# of n digit perfect squaresdef countSquares(n):     r = math.ceil(math.sqrt                 (math.pow(10, n)));    l = math.ceil(math.sqrt                 (math.pow(10, n - 1)));         return r - l;     # Driver coden = 3;print(countSquares(n)); # This code is contributed by grand_master
// C# Program to count perfect// squares of given lengthusing System;class GFG{ // Function to return the count// of n digit perfect squaresstatic int countSquares(int n){    int r = (int) Math.Ceiling(Math.Sqrt                              (Math.Pow(10, n)));    int l = (int) Math.Ceiling(Math.Sqrt                              (Math.Pow(10, n - 1)));    return r - l;} // Driver codepublic static void Main(){    int n = 3;    Console.Write(countSquares(n));}} // This code is contributed by Nidhi_Biet
<script> // JavaScript Program to count// perfect squares of given length // Function to return the count of// n digit perfect squaresfunction countSquares(n){    let r = Math.ceil(Math.sqrt(Math.pow(10, n)));    let l = Math.ceil(Math.sqrt(Math.pow(10, n - 1)));    return r - l;} // Driver codelet n = 3;document.write(countSquares(n)); </script>
22
 
Time Complexity: O(N)
Auxiliary Space: O(1)
Rajput-Ji
sapnasingh4991
Rohit_ranjan
nidhi_biet
grand_master
Akanksha_Rai
subham348
subhammahato348
maths-perfect-square
number-digits
number-theory
Competitive Programming
Mathematical
number-theory
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.