Given a positive number n, count all distinct Non-Negative Integer pairs (x, y) that satisfy the inequality x*x + y*y < n.
Examples:
Input: n = 5
Output: 6
The pairs are (0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (0, 2)
Input: n = 6
Output: 8
The pairs are (0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (0, 2),
(1, 2), (2, 1)
A Simple Solution is to run two loops. The outer loop goes for all possible values of x (from 0 to ?n). The inner loops pick all possible values of y for the current value of x (picked by outer loop).
Following is the implementation of a simple solution.
C++
#include <iostream>
using namespace std;
int countSolutions( int n)
{
int res = 0;
for ( int x = 0; x*x < n; x++)
for ( int y = 0; x*x + y*y < n; y++)
res++;
return res;
}
int main()
{
cout << "Total Number of distinct Non-Negative pairs is "
<< countSolutions(6) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int countSolutions( int n)
{
int res = 0 ;
for ( int x = 0 ; x * x < n; x++)
for ( int y = 0 ; x * x + y * y < n; y++)
res++;
return res;
}
public static void main(String args[])
{
System.out.println ( "Total Number of distinct Non-Negative pairs is "
+countSolutions( 6 ));
}
}
|
Python3
def countSolutions(n):
res = 0
x = 0
while (x * x < n):
y = 0
while (x * x + y * y < n):
res = res + 1
y = y + 1
x = x + 1
return res
if __name__ = = '__main__' :
print ( "Total Number of distinct Non-Negative pairs is " ,
countSolutions( 6 ))
|
C#
using System;
class GFG {
static int countSolutions( int n)
{
int res = 0;
for ( int x = 0; x*x < n; x++)
for ( int y = 0; x*x + y*y < n; y++)
res++;
return res;
}
public static void Main()
{
Console.WriteLine( "Total Number of "
+ "distinct Non-Negative pairs is "
+ countSolutions(6));
}
}
|
PHP
<?php
function countSolutions( $n )
{
$res = 0;
for ( $x = 0; $x * $x < $n ; $x ++)
for ( $y = 0; $x * $x + $y * $y < $n ; $y ++)
$res ++;
return $res ;
}
{
echo "Total Number of distinct Non-Negative pairs is " ;
echo countSolutions(6) ;
return 0;
}
?>
|
Javascript
<script>
function countSolutions( n){
let res = 0;
for (let x = 0; x*x < n; x++){
for (let y = 0; x*x + y*y < n; y++){
res++;
}
}
return res;
}
document.write( "Total Number of distinct Non-Negative pairs is " +countSolutions(6));
</script>
|
Output:
Total Number of distinct Non-Negative pairs is 8
An upper bound for the time complexity of the above solution is O(n). The outer loop runs ?n times. The inner loop runs at most ?n times.
Auxiliary Space: O(1)
Using an Efficient Solution, we can find the count in O(?n) time. The idea is to first find the count of all y values corresponding to the 0 value of x. Let count of distinct y values be yCount. We can find yCount by running a loop and comparing yCount*yCount with n.
After we have the initial yCount, we can one by one increase the value of x and find the next value of yCount by reducing yCount.
C++
#include <iostream>
using namespace std;
int countSolutions( int n)
{
int x = 0, yCount, res = 0;
for (yCount = 0; yCount*yCount < n; yCount++) ;
while (yCount != 0)
{
res += yCount;
x++;
while (yCount != 0 && (x*x + (yCount-1)*(yCount-1) >= n))
yCount--;
}
return res;
}
int main()
{
cout << "Total Number of distinct Non-Negative pairs is "
<< countSolutions(6) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int countSolutions( int n)
{
int x = 0 , yCount, res = 0 ;
for (yCount = 0 ; yCount * yCount < n; yCount++) ;
while (yCount != 0 )
{
res += yCount;
x++;
while (yCount != 0 && (x * x + (yCount - 1 )
* (yCount - 1 ) >= n))
yCount--;
}
return res;
}
public static void main(String args[])
{
System.out.println ( "Total Number of distinct Non-Negative pairs is "
+countSolutions( 6 )) ;
}
}
|
Python3
def countSolutions(n):
x = 0
res = 0
yCount = 0
while (yCount * yCount < n):
yCount = yCount + 1
while (yCount ! = 0 ):
res = res + yCount
x = x + 1
while (yCount ! = 0 and (x * x
+ (yCount - 1 ) *
(yCount - 1 ) > = n)):
yCount = yCount - 1
return res
print ( "Total Number of distinct " ,
"Non-Negative pairs is "
, countSolutions( 6 ))
|
C#
using System;
class GFG {
static int countSolutions( int n)
{
int x = 0, yCount, res = 0;
for (yCount = 0; yCount * yCount < n;
yCount++) ;
while (yCount != 0)
{
res += yCount;
x++;
while (yCount != 0 && (x * x +
(yCount - 1) *
(yCount - 1) >= n))
yCount--;
}
return res;
}
public static void Main()
{
Console.WriteLine( "Total Number of "
+ "distinct Non-Negative pairs is "
+ countSolutions(6)) ;
}
}
|
PHP
<?php
function countSolutions( $n )
{
$x = 0; $yCount ; $res = 0;
for ( $yCount = 0; $yCount * $yCount < $n ;
$yCount ++) ;
while ( $yCount != 0)
{
$res += $yCount ;
$x ++;
while ( $yCount != 0 and ( $x * $x +
( $yCount -1) * ( $yCount -1) >= $n ))
$yCount --;
}
return $res ;
}
echo "Total Number of distinct Non-Negative" ,
"pairs is " , countSolutions(6) , "\n" ;
?>
|
Javascript
<script>
function countSolutions(n)
{
let x = 0, yCount, res = 0;
for (yCount = 0; yCount * yCount < n;
yCount++) ;
while (yCount != 0)
{
res += yCount;
x++;
while (yCount != 0 && (x * x +
(yCount - 1) *
(yCount - 1) >= n))
yCount--;
}
return res;
}
document.write( "Total Number of "
+ "distinct Non-Negative pairs is "
+ countSolutions(6)) ;
</script>
|
Output:
Total Number of distinct Non-Negative pairs is 8
Time Complexity of the above solution seems more but if we take a closer look, we can see that it is O(?n). In every step inside the inner loop, the value of yCount is decremented by 1. The value yCount can decrement at most O(?n) times as yCount is counted y values for x = 0. In the outer loop, the value of x is incremented. The value of x can also increment at most O(?n) times as the last x is for yCount equals 1.
Auxiliary Space: O(1)
This article is contributed by Sachin Gupta. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!