三角平方数
1 三角数和平方数
有些数是”有形“的,它们可以用图形来展示,三角数和平方数就是这样,如下图所示:
因此我们有三角数和平方数的通项公式:
- 三角数: 1 , 3 , 6 , 10 , 15 , 21 , 28 , 36 , 45 , 55 , 66 , 78 , 91 , 105 , ⋯ 1,3,6,10,15,21,28,36,45,55,66,78,91,105,\cdots 1,3,6,10,15,21,28,36,45,55,66,78,91,105,⋯,第 m m m个三角数为 m ( m + 1 ) 2 \cfrac{m(m+1)}{2} 2m(m+1)
- 平方数: 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 , 81 , 100 , 121 , 144 , 169 , ⋯ 1,4,9,16,25,36,49,64,81,100,121,144,169,\cdots 1,4,9,16,25,36,49,64,81,100,121,144,169,⋯,第 n n n个平方数为 n 2 n^2 n2
不难发现,有一些数既是三角数又是平方数,我们就叫它三角平方数,例如 36 36 36,它既可以表示为 6 ∗ 6 6*6 6∗6的正方形,又可以表示成 8 8 8行的三角形。
那么问题来了:
- 三角平方数有多少个呢?
- 能不能给出一个寻找所有三角平方数的公式呢?
2 分析
三角数具有形式
m
(
m
+
1
)
2
\cfrac{m(m+1)}{2}
2m(m+1),平方数具有形式
n
2
n^2
n2,那么三角平方数就对应下面方程的整数解
n
2
=
m
(
m
+
1
)
2
n^2=\cfrac{m(m+1)}{2}
n2=2m(m+1)
对这个方程进行一些简单的代数运算可得:
8
n
2
=
(
2
m
+
1
)
2
−
1
8n^2=(2m+1)^2-1
8n2=(2m+1)2−1
看到这个形式应该想到代换,我们令:
x
=
2
m
+
1
,
y
=
2
n
x = 2m+1,y=2n
x=2m+1,y=2n
带入到原方程中得:
x
2
−
2
y
2
=
1
x^2-2y^2=1
x2−2y2=1
那么这个方程的解就应该就可以得到三角平方数:
m
=
x
−
1
2
,
n
=
y
2
m=\cfrac{x-1}{2},n=\cfrac{y}{2}
m=2x−1,n=2y
3 推导
通过实验,我们可以得到一组解 ( x , y ) = ( 3 , 2 ) (x,y)=(3,2) (x,y)=(3,2),它给出了三角平方数 ( m , n ) = ( 1 , 1 ) (m, n)=(1,1) (m,n)=(1,1)。进一步实验我们可以得到另一组解 ( x , y ) = ( 17 , 12 ) (x,y)=(17,12) (x,y)=(17,12),相应的三角平方数为 ( m , n ) = ( 8 , 6 ) (m, n)=(8, 6) (m,n)=(8,6)。
对于 y = 1 , 2 , 3 ⋯ y=1,2,3\cdots y=1,2,3⋯我可以通过计算机验证 2 y 2 + 1 2y^2+1 2y2+1是否为平方数可以找到更多的解。也就是暴力尝试,下一个解是 ( x , y ) = ( 99 , 70 ) (x,y)=(99,70) (x,y)=(99,70)。
那要如何求解方程
x
2
−
2
y
2
=
1
x^2-2y^2=1
x2−2y2=1呢?看到这个形式通常会想到使用因式分解,但如果限制在整数范围内,
x
2
−
2
y
2
x^2-2y^2
x2−2y2就没办法分解。不过我们可以把它分解成这样:
x
2
−
2
y
2
=
(
x
+
y
2
)
(
x
−
y
2
)
(1)
x^2-2y^2=(x+y\sqrt 2)(x - y\sqrt 2) \tag{1}
x2−2y2=(x+y2)(x−y2)(1)
那么解
(
x
,
y
)
=
(
3
,
2
)
(x,y)=(3, 2)
(x,y)=(3,2)按照
(
1
)
(1)
(1)式写成:
1
=
3
2
−
2
∗
2
2
=
(
3
+
2
2
)
(
3
−
2
2
)
\begin{aligned} 1 = 3^2-2*2^2 &=(3+2\sqrt 2)(3 - 2\sqrt 2) \end{aligned}
1=32−2∗22=(3+22)(3−22)
平方得
1
=
1
2
=
(
3
+
2
2
)
2
(
3
−
2
2
)
2
=
(
17
+
12
2
)
(
17
−
12
2
)
=
1
7
2
−
2
∗
1
2
2
\begin{aligned} 1 =1^2 &=(3+2\sqrt 2)^2(3 - 2\sqrt 2)^2\\ &= (17+12\sqrt2)(17-12\sqrt2)\\ &=17^2 - 2*12^2 \end{aligned}
1=12=(3+22)2(3−22)2=(17+122)(17−122)=172−2∗122
我们看到
(
x
,
y
)
=
(
17
,
12
)
(x,y)=(17,12)
(x,y)=(17,12)也是一组解,而且是通过对解
(
x
,
y
)
=
(
3
,
2
)
(x,y)=(3, 2)
(x,y)=(3,2)平方得到的。那么再来试试三次方:
1
=
1
3
=
(
3
+
2
2
)
3
(
3
−
2
2
)
3
=
(
99
+
70
2
)
(
99
−
70
2
)
=
9
9
2
−
2
∗
7
0
2
\begin{aligned} 1 =1^3 &=(3+2\sqrt 2)^3(3 - 2\sqrt 2)^3\\ &= (99+70\sqrt2)(99-70\sqrt2)\\ &=99^2 - 2*70^2 \end{aligned}
1=13=(3+22)3(3−22)3=(99+702)(99−702)=992−2∗702
(
x
,
y
)
=
(
99
,
70
)
(x,y)=(99,70)
(x,y)=(99,70)也是一组解,再来四次方:
1
=
1
4
=
(
3
+
2
2
)
4
(
3
−
2
2
)
4
=
(
577
+
408
2
)
(
577
−
408
2
)
=
57
7
2
−
2
∗
40
8
2
\begin{aligned} 1 =1^4 &=(3+2\sqrt 2)^4(3 - 2\sqrt 2)^4\\ &= (577+408\sqrt2)(577-408\sqrt2)\\ &=577^2 - 2*408^2 \end{aligned}
1=14=(3+22)4(3−22)4=(577+4082)(577−4082)=5772−2∗4082
(
x
,
y
)
=
(
577
,
408
)
(x,y)=(577,408)
(x,y)=(577,408)也是一组解,其对应的三角平方数是
(
m
,
n
)
=
(
288
,
204
)
(m, n)=(288, 204)
(m,n)=(288,204)。
我们注意到,在求下一个解的时候不必对初始解自乘得到更高次幂,只需要用当前解再乘以初始解就好了。比如求
(
x
,
y
)
=
(
577
,
408
)
(x,y)=(577,408)
(x,y)=(577,408)的下一个解:
(
3
+
2
2
)
(
577
+
408
2
)
=
3363
+
2378
2
(3+2\sqrt2)(577+408\sqrt{2})=3363+2378\sqrt2
(3+22)(577+4082)=3363+23782
由此得到解
(
x
,
y
)
=
(
3363
,
2378
)
(x,y)=(3363,2378)
(x,y)=(3363,2378),继续往下计算,可以得到越来越大的解,其对应的三角平方数也越来越大,如下图所示,通过将
3
+
2
2
3+2\sqrt2
3+22自乘我们就可以持续得到三角平方数,因此,三角平方数是有无穷多个的。
4 三角平方数定理
定理内容如下(证明就略了吧):
- 方程
x
2
−
2
y
2
=
1
x^2-2y^2=1
x2−2y2=1的每个正整数解都可以通过
3
+
2
2
3+2\sqrt2
3+22自乘得到,即解
(
x
k
,
y
k
)
(x_k,y_k)
(xk,yk)可以通过展开下式得到:
x k + y k 2 = ( 3 + 2 2 ) k , k = 1 , 2 , 3 , ⋯ x_k+y_k\sqrt2=(3+2\sqrt2)^k,\ \ \ \ \ \ k=1,2,3,\cdots xk+yk2=(3+22)k, k=1,2,3,⋯ - 每个三角平方数
n
2
=
1
2
m
(
m
+
1
)
n^2=\frac{1}{2}m(m+1)
n2=21m(m+1)由:
m = x k − 1 2 , n = y k 2 , k = 1 , 2 , 3 , ⋯ m=\cfrac{x_k-1}{2},n=\cfrac{y_k}{2},\ \ \ \ \ \ k=1,2,3,\cdots m=2xk−1,n=2yk, k=1,2,3,⋯
给出,其中 ( x k , y k ) (x_k, y_k) (xk,yk)是由上式得到的解。
5 生成三角平方数
既然我们知道了三角平方数定理,那么我们就可以写段小程序生成一下前 n n n个三角平方数了。下面生成一下前20个。
x, y = 1, 0 #方程的解
m, n = 1, 1 #对应的三角平方数
for i in range(20):
x, y = 3*x + 4*y, 2*x + 3*y
m, n = (x - 1)//2, y//2
print('第{}个三角平方数为'.format(i+1), n**2)
输出结果就是这样子:
第1个三角平方数为 1
第2个三角平方数为 36
第3个三角平方数为 1225
第4个三角平方数为 41616
第5个三角平方数为 1413721
第6个三角平方数为 48024900
第7个三角平方数为 1631432881
第8个三角平方数为 55420693056
第9个三角平方数为 1882672131025
第10个三角平方数为 63955431761796
第11个三角平方数为 2172602007770041
第12个三角平方数为 73804512832419600
第13个三角平方数为 2507180834294496361
第14个三角平方数为 85170343853180456676
第15个三角平方数为 2893284510173841030625
第16个三角平方数为 98286503002057414584576
第17个三角平方数为 3338847817559778254844961
第18个三角平方数为 113422539294030403250144100
第19个三角平方数为 3853027488179473932250054441
第20个三角平方数为 130889512058808083293251706896
最后说明一下, x k , y k x_k,y_k xk,yk是按指数增长的。
6 参考资料
[1] 《数论概论》第四版P161-P166