线段上的格点数量

平面坐标系上有两个格点\(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点。

  1. 首先根据给出的两点,建立直线方程\(\frac{y-y_1}{y_2-y1} =\frac{x-x_1}{x_2-x_1}\)
  2. 转化一下可得\(x(y_2-y_1)-y(x_1-x_2)=x_1y-y_1x\)
  3. 对照\(ax+by=c\)\(d=gcd(a,b)\)\(x\)的通解公式为\(x=x_0+(b/d)n\)
  4. 代入限制条件\(x_1<x<x_2\),有\(x_1<x_1+\frac{x_1-x_2}{d}n<x_2\),可解得\(-d<n<0\)
  5. 所以线段内有\(d-1\)个点,即\(gcd(|y_2-y_1|,|x_1-x_2|)-1\)个点
posted @ 2023-07-08 14:09  wuyoudexian  阅读(110)  评论(0)    收藏  举报