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