给定一个以原点或(0,0)为中心的2-D半径r的圆。任务是找到圆周上的总晶格点。格点是在二维空间中坐标为整数的点。
例子:
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.
为了找到晶格点,我们基本上需要找到满足等式x 2 + y 2 = r 2的(x,y)值。
对于满足上述方程式的任何(x,y)值,我们实际上共有4个不同的组合满足方程式。例如,如果r = 5且(3,4)是满足等式的对,则实际上有4个组合(3,4),(-3,4),(-3,-4),(3,- 4)。但是有一个例外,在(0,r)或(r,0)的情况下,实际上有2个点,因为没有负数0。
// 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.
以下是上述想法的实现。
CPP
// C++ program to find countLattice points on a circle
#include
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
Java
// Java program to find
// countLattice points on a circle
class GFG
{
// Function to count
// Lattice points on a circle
static 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
Python3
# Python3 program to find
# countLattice podefs on a circle
import math
# Function to count Lattice
# podefs on a circle
def countLattice(r):
if (r <= 0):
return 0
# Initialize result as 4 for (r, 0), (-r. 0),
# (0, r) and (0, -r)
result = 4
# Check every value that can be potential x
for x in range(1, r):
# Find a potential y
ySquare = r*r - x*x
y = int(math.sqrt(ySquare))
# checking whether square root is an defeger
# or not. Count increments by 4 for four
# different quadrant values
if (y*y == ySquare):
result += 4
return result
# Driver program
r = 5
print(countLattice(r))
# This code is contributed by
# Smitha Dinesh Semwal
C#
// C# program to find countLattice
// points on a circle
using System;
class GFG {
// Function to count Lattice
// points on a circle
static 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 = (int)Math.Sqrt(ySquare);
// checking whether square root
// is an integer or not. Count
// increments by 4 for four
// different quadrant values
if (y*y == ySquare)
result += 4;
}
return result;
}
// Driver code
public static void Main()
{
int r = 5;
Console.Write(countLattice(r));
}
}
// This code is contributed by nitin mittal.
PHP
输出:
12
参考:
http://mathworld.wolfram.com/CircleLatticePoints.html