# Circle and Lattice Points

Given a circle of radius r in 2-D with origin or (0, 0) as center. The task is to find the total lattice points on circumference. Lattice Points are points with coordinates as integers in 2-D space.

Example:

```Input  : r = 5.
Output : 12
Below are lattice points on a circle with
radius 5 and origin as (0, 0).
(0,5), (0,-5), (5,0), (-5,0),
(3,4), (-3,4), (-3,-4), (3,-4),
(4,3), (-4,3), (-4,-3), (4,-3).
are 12 lattice point.

Circle with 12-lattice point and radius-5[/caption]
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

To find lattice points, we basically need to find values of (x, y) which satisfy the equation x2 + y2 = r2.
For any value of (x, y) that satisfies the above equation we actually have total 4 different combination which that satisfy the equation. For example if r = 5 and (3, 4) is a pair which satisfies the equation, there are actually 4 combinations (3, 4) , (-3,4) , (-3,-4) , (3,-4). There is an exception though, in case of (0, r) or (r, 0) there are actually 2 points as there is no negative 0.

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

```// Initialize result as 4 for (r, 0), (-r. 0),
// (0, r) and (0, -r)
result = 4

Loop for x = 1 to r-1 and do following for every x.
If r*r - x*x is a perfect square, then add 4
tor result.
```

Below is C++ implementation of above idea.

```// C++ program to find countLattice points on a circle
#include<bits/stdc++.h>
using namespace std;

// Function to count Lattice points on a circle
int countLattice(int r)
{
if (r <= 0)
return 0;

// Initialize result as 4 for (r, 0), (-r. 0),
// (0, r) and (0, -r)
int result = 4;

// Check every value that can be potential x
for (int x=1; x<r; x++)
{
// Find a potential y
int ySquare = r*r - x*x;
int y = sqrt(ySquare);

// checking whether square root is an integer
// or not. Count increments by 4 for four
if (y*y == ySquare)
result += 4;
}

return result;
}

// Driver program
int main()
{
int r = 5;
cout << countLattice(r);
return 0;
}
```

Output:

```12
```

# GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
3 Average Difficulty : 3/5.0
Based on 6 vote(s)