线段上的格点数量
平面坐标系上有两个格点\(p_1(x_1,y_1)\)和\(p_2(x_2,y_2)\),求线段\(p_1p_2\)上除了\(p_1,p_2\)还有几个格点。
定理
- 当斜率存在时,格点数量为 \(gcd(|y_2-y_1|,|x_1-x_2|)-1\)
- 当斜率不存在且\(y_1\ne y_2\)时,格点数量为 \(|y_2-y_1|-1\)
- 当斜率不存在且\(y_1=y_2\)时,格点数量为0
证明
第2,3点都很好想,主要是第1点。
- 首先根据给出的两点,建立直线方程\(\frac{y-y_1}{y_2-y1} =\frac{x-x_1}{x_2-x_1}\)。
- 转化一下可得\(x(y_2-y_1)-y(x_1-x_2)=x_1y-y_1x\)
- 对照\(ax+by=c\),\(d=gcd(a,b)\),\(x\)的通解公式为\(x=x_0+(b/d)n\)
- 代入限制条件\(x_1<x<x_2\),有\(x_1<x_1+\frac{x_1-x_2}{d}n<x_2\),可解得\(-d<n<0\)
- 所以线段内有\(d-1\)个点,即\(gcd(|y_2-y_1|,|x_1-x_2|)-1\)个点

浙公网安备 33010602011771号