045. 三角形数,五边形数和六边形数(Triangular, pentagonal, and hexagonal)
三角形数,五边形数和六边形数可分别由以下公式生成:
- 三角形数:\(T_n=n(n+1)/2 \qquad 1,3,6,10,15\cdots\)
- 五边形数:\(P_n=n(3n-1)/2 \qquad 1,5,12,22,35\cdots\)
- 六边形数:\(H_n=n(2n-1) \qquad 1,6,15,28,45\cdots\)
可以论证\(T_{285}=P_{165}=H_{143}=40755\),求下一个同时为五边形数和六边形数的三角形数。
分析:这道题目相对比较简单直接。首先可以观察到一个六边形数即是一个奇数位置的三角数,比如1是第一个三角形数,6是第三个三角形数,15是第五个三角形数。事实上,对任意奇数\((2n-1)\),将其代入三角形数的通项有:\((2n-1)(2n-1+1)/2=n(2n-1)\)即是一个六边形数。所以六边形数只是三角形数的子集,当一个数是六边形数,我们无需再验证它是否是三角形数。在上一道题即第四十四题中,我们已经编写了一个判断一个数是否为五边形数的函数,这里可以直接复用。我们从\(n=144\)开始依次生成六边形数,再判断生成的数是否为五边形数,如果不是再生成下一个数,如果是则返回该六边形数,即为所求。
from math import sqrt
def is_pantagon(x):
if (sqrt(24*x+1)+1) % 6 == 0:
return True
return False
def main():
i = 144
while True:
h = i*(2*i-1)
if is_pantagon(h):
return h
else:
i += 1