138. 特殊等腰三角形(Special isosceles triangles)

考虑底为\(b = 16\),腰为\(L = 17\)的等腰三角形:

p138

使用毕达哥拉斯定理,我们可以求出三角形的高是\(h=\sqrt{17^2-8^2}=15\),恰好比底长小一。当\(b = 272\)\(L = 305\)时,可得\(h = 273\),恰好比底长大一,这是满足性质\(h = b ± 1\)的三角形中第二小的。

对于最小的\(12\)个满足\(h = b ± 1\)\(b,L\)均为正整数的等腰三角形,求\(\sum{L}\)

分析:又一个佩尔方程相关的问题,看来欧拉计划的出题者对佩尔方程真是非常喜爱。回忆一下,我们在第六十六题中第一次接触了佩尔方程,学习了如何使用连分数展开来求解佩尔方程的基本解;在第九十四题中我们通过对原方程进行配方变换,将普遍的二元二次不定方程变换为佩尔方程并求解;然后在第一百题中接触了负佩尔方程,并利用解之间的递归关系来求解满足特定要求的正整数解。这道题所需要的知识与技巧之前基本都已经涉及过了,这道题只需要依葫芦画瓢即可,首先根据题意列出三角形各边关系的方程:

$$ L^{2} -\left(\frac{b}{2}\right)^{2} =( b\pm 1)^{2} \Rightarrow L^{2} -\frac{b^{2}}{4} =b^{2} \pm 2b+1 $$

在上式左右两边同时乘以\(20\)并移项:

$$ 20L^{2} -5b^{2} =20b^{2} \pm 40b+20\Rightarrow 25b^{2} \pm 40b-20L^{2} =-20 $$

在上式两边同时加上\(16\)并配方:

$$ 25b^{2} \pm 40b+16-20L^{2} =-4\Rightarrow ( 5b\pm 4)^{2} -20L^{2} =-4 $$

在上式两侧同时除以\(4\),则有:

$$ \left(\frac{5b\pm 4}{2}\right)^{2} -5L^{2} =-1 $$

\(x=\left(\frac{5b\pm 4}{2}\right),y=L\),则有:

$$ x^{2} -5y^{2} =-1 $$

即为我们在第一百题中已经接触过的负佩尔方程。因此,我们只需要解出这个佩尔方程,得到相应的正整数解\(x,y\),再代回原式就可以找到相应的\(b,L\),即:

$$ b=\frac{2x\mp 4}{5} ,L=y $$

从上式可以看出,\(x\)为正整数并不能保证\(b\)为正整数,所以我们在求解\(b,L\)的正整数解时需要注意逐一验证。

容易发现\(x_1=2,y_1=1\)是方程\(x^2-5y^2=-1\)最小正整数解,则根据负佩尔方程解之间的递推关系可得:

$$ \begin{aligned} x_{n} +y_{n}\sqrt{5} & =\left( x_{n-1} +y_{n-1}\sqrt{5}\right)\left( x_{1} +y_{1}\sqrt{5}\right)^{2}\\ & =\left( x_{n-1} +y_{n-1}\sqrt{5}\right)\left( 2+\sqrt{5}\right)^{2}\\ & =\left( x_{n-1} +y_{n-1}\sqrt{5}\right)\left( 9+4\sqrt{5}\right)\\ & =( 9x_{n-1} +20y_{n-1}) +( 4x_{n-1} +9y_{n-1})\sqrt{5} \end{aligned} $$

因此我们可以得到递推关系:

$$ x_{n} =9x_{n-1} +20y_{n-1} ,y_{n} =4x_{n-1} +9y_{n-1} $$

使用以上递推关系,可以找到这个佩尔方程的无穷多组正整数解,如将\((x_1=2,y_1=1)\)代入,则有\(x_2=38,y_2=17\),从而可以得到\(b_1=(2*38+4)/5=16,L_1=17\),正是题目中给出的第一组正整数解。同理我们将\((38,17)\)代入递推式得到\(x_3=682,y_3=305\),从而得到第二组正整数解为\(b_2=(2*382-4)/5=272,L_2=305\)正是题目中给出的第二组解。如上所述可以找到原方程的前十二个正整数解,如下:

$$ \begin{cases} L_{1} & = & 17\\ L_{2} & = & 305\\ L_{3} & = & 5473\\ L_{4} & = & 98209\\ L_{5} & = & 1762289\\ L_{6} & = & 31622993\\ L_{7} & = & 567451585\\ L_{8} & = & 10182505537\\ L_{9} & = & 182717648081\\ L_{10} & = & 3278735159921\\ L_{11} & = & 58834515230497\\ L_{12} & = & 1055742538989025 \end{cases} $$

计算他们的总和,即为题目所求。代码如下:

# time cost = 6.96 µs ± 23.6 ns

def main(N=12):
    n,res = 0,0
    x,y = 38,17
    while n < N:
        b1,b2 = 2*x+4,2*x-4
        if b1%5 == 0 or b2%5==0:
            res += y
            n += 1
        x,y = 9*x+20*y,4*x+9*y
    return res