查找半径为 R 且维度为 D 的球体内以原点为中心的整数点数

Finding the number of integer points inside a sphere of radius R and dimension D centered at the Origin

本文关键字:原点 为中心 整数 查找      更新时间:2023-10-16

我正在编写一个计算机程序/算法来计算半径为R和以原点为中心的维度D的球体内的整数点数。本质上,如果我们有一个维度为 2(圆)和半径为 5 的球体,我正在确定不等式 X^2+Y^2 ≤ 25 的所有整数解。与其计算每个可能的整数点,有没有一种有效的方法来计算点?使用对称性?

假设维度为 3,R 是半径。对于 z = 0,可能的 x,y 坐标是半径 R 的圆内的点,对于任何 z,x,y 是半径 sqrt( R * R - z * z) 的圆内的点;Z 的可能值是 -r, ..0, 1, ..r 其中 r 是小于 R 的最小整数。请注意,z 和 -z 的计数将相同。

当我们下降到维度 1 时,我们问我满足多少个整数 |i|

所以:

int ncip( int dim, double R)
{   
    int i;
    int r = (int)floor( R);
    if ( dim == 1)
    {   return 1 + 2*r; 
    }
    int n = ncip( dim-1, R); // last coord 0
    for( i=1; i<=r; ++i)
    {   n += 2*ncip( dim-1, sqrt( R*R - i*i)); // last coord +- i
    }
    return n;
}

好吧,使用对称性,您始终可以只计算正侧的所有整数解,然后反转分量。所以,在你的圆圈(D = 2,R = 5)的情况下,你只需要找到
{ X,Y ∈ N: X²+Y² ≤ R }.然后创建组合 (X,Y)、(X,-Y)、(-X,Y)、(-X,-Y)
这只剩下 (1/2)D 解决方案可供查找。

此外,您可以将半径 R 的圆近似为半径为 R/√2 的正方形,因此可以自动添加小于或等于该值的所有整数组合。