Python - 是五角形数字检查

ggo*_*don 4 python math sequence

我正在尝试写一张支票,以确定数字是否为五边形.五角形数字是由公式生成的数字:

PN = N(3N-1)/ 2

即第一个五边形数字是:

1,5,12,22,35,51,70,92,117,145,......

当答案应该为True时,我的代码会抛出False,因此显然不正确,但我很难理解为什么.它如下:

from math import sqrt
def is_pent(n):
    ans = any((x*((3*x)-1))/2 == n for x in range(int(sqrt(n))))
    return ans
Run Code Online (Sandbox Code Playgroud)

我会感谢一些帮助!

Eug*_*ash 7

根据维基百科,为了测试正整数x是否是五角形数,您可以检查这((sqrt(24*x) + 1) + 1)//6是一个自然数.像这样的东西应该适用于不是很大的整数:

from math import sqrt 

def is_pentagonal(n):
    k = (sqrt(24*n+1)+1)/6
    return k.is_integer()
Run Code Online (Sandbox Code Playgroud)