Count number less than N which are product of perfect squares

Given an Integer N. The task is count numbers P less than N such that P is a product of two distinct perfect squares.

Examples:

Input : N = 36
Output : 5
Numbers are 4 = 12 * 22, 
9 = 12 * 32, 
16 = 12 * 42, 
25 = 12 * 52, 
36 = 12 * 62

Input : N = 1000000
Output : 999



Approach: Let us consider a number P = (a2 * b2) such that P <= N. So we have (a2 * b2) <= N. This can be written as (a * b) <= sqrt(N).

So we have to count pairs (a, b) such that (a * b) <= sqrt(N) and a <= b.
Let us take a number Q = (a * b) such that Q <= sqrt(N).

Taking a = 1, we have b = sqrt(N) – 1 numbers such that, ( a * b = Q <= sqrt(N)).

Thus we can have all sqrt(N) – 1 numbers such that (a2 * b2) <= N.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to count number less
// than N which are product of
// any two perfect squares
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to count number less
// than N which are product of
// any two perfect squares
int countNumbers(int N)
{
    return int(sqrt(N)) - 1;
}
  
// Driver program
int main()
{
    int N = 36;
  
    cout << countNumbers(N);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to count number less
// than N which are product of
// any two perfect squares
import java.util.*;
  
  
class solution
{
  
// Function to count number less
// than N which are product of
// any two perfect squares
static int countNumbers(int N)
{
    return (int)Math.sqrt(N) - 1;
}
  
// Driver program
public static void main(String args[])
{
    int N = 36;
  
    System.out.println(countNumbers(N));
      
}
  
}
  
//This code is contributed by
// Surendra_Gangwar

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 program to count number 
# less than N which are product of
# any two perfect squares
import math
  
# Function to count number less
# than N which are product of
# any two perfect squares
def countNumbers(N):
    return int(math.sqrt(N)) - 1
  
# Driver Code
if __name__ == "__main__":
    N = 36
  
    print(countNumbers(N))
  
# This code is contributed
# by ChitraNayal

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count number less
// than N which are product of
// any two perfect squares
using System;
  
class GFG
{
// Function to count number less
// than N which are product of
// any two perfect squares
static int countNumbers(int N)
{
    return (int)(Math.Sqrt(N)) - 1;
}
  
// Driver Code
public static void Main()
{
    int N = 36;
  
    Console.Write(countNumbers(N));
}
}
  
// This code is contributed 
// by Akanksha Rai

chevron_right


PHP

Output:

5

Time Complexity: O(log(N))



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.