最近展开式灵感爆棚!我又来了!
考虑一般情况,即点阵为 `n\times m` 的情形,以下默认 `x_i\in\{1,2,\ldots,n\}`, `y_i\in\{1,2,\ldots,m\}`。
首先,直角边平行于坐标轴的个数是 `nm(n-1)(m-1)` 这个就不用我说了吧,下面研究直角边不平行于坐标轴的。
设直角顶点的坐标为 `A(x_0,y_0)`,另外两顶点为 `B(x_1,y_1)`, `C(x_2,y_2)` 且 `k_{AB}>0`, `k_{AC}<0`,即 `(x_1-x_0)(y_1-y_0)>0`, `(x_2-x_0)(y_2-y_0)<0`,要垂直,即 `k_{AB}\cdot k_{AC}=-1`,也即 `(y_1-y_0)/(x_1-x_0)+(x_2-x_0)/(y_2-y_0)=0`,于是,构造
\[f(x_0,y_0)=\left( \sum_{(x_1-x_0)(y_1-y_0)>0}x^{(y_1-y_0)/(x_1-x_0)} \right)\left( \sum_{(x_2-x_0)(y_2-y_0)<0}x^{(x_2-x_0)/(y_2-y_0)} \right),\]
设 `f(x_0,y_0)` 展开式中的常数项为 `c(x_0,y_0)`,那么它就是以 `A(x_0,y_0)` 为直角顶点的直角三角形个数,让 `A` 取遍所有点,然后全加起来就是所求。
综上所述,直角三角形个数就是
\[\sum_{x_0=1}^n\sum_{y_0=1}^mc(x_0,y_0)+nm(n-1)(m-1).\]
另外,为便于软件输入,有必要对 `f(x_0,y_0)` 换个写法,即
\begin{align*}
f(x_0,y_0)={}&\left( \sum_{x_1=1}^{x_0-1}\sum_{y_1=1}^{y_0-1}x^{(y_1-y_0)/(x_1-x_0)}+\sum_{x_1=x_0+1}^n\sum_{y_1=y_0+1}^mx^{(y_1-y_0)/(x_1-x_0)} \right)\\
&\times\left( \sum_{x_2=1}^{x_0-1}\sum_{y_2=y_0+1}^mx^{(x_2-x_0)/(y_2-y_0)}+\sum_{x_2=x_0+1}^n\sum_{y_2=1}^{y_0-1}x^{(x_2-x_0)/(y_2-y_0)} \right).
\end{align*}
这样就得到了 Mathematica 的如下代码:- c[x0_, y0_, n_, m_] :=
- Coefficient[
- Expand[(Sum[x^((y1 - y0)/(x1 - x0)), {x1, 1, x0 - 1}, {y1, 1, y0 - 1}] +
- Sum[x^((y1 - y0)/(x1 - x0)), {x1, x0 + 1, n}, {y1, y0 + 1, m}])
- (Sum[x^((x2 - x0)/(y2 - y0)), {x2, 1, x0 - 1}, {y2, y0 + 1, m}] +
- Sum[x^((x2 - x0)/(y2 - y0)), {x2, x0 + 1, n}, {y2, 1, y0 - 1}])], x, 0]
- cc[m_, n_] :=
- Sum[c[x0, y0, n, m], {x0, 1, n}, {y0, 1, m}] + n m (n - 1) (m - 1)
复制代码 然后输入 cc[4,4] 得到 200,看来没写错
cc[4, 5] 得 342
cc[5, 5] 得 596
cc[6, 6] 得 1444
cc[10, 10] 得 15332
cc[20, 20] 得 337960(用时半分多钟
cc[30, 30] 得 1984564(用时约8分钟
等等…… |