【问题标题】:How to determine if a number is polygonal for a polygon with s sides对于具有 s 边的多边形,如何确定数字是否为多边形
【发布时间】:2017-08-21 03:39:23
【问题描述】:

多边形数定义为以正多边形形状排列的点表示的数。

例如:

三角数是 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, ...

平方数是 0、1、4、9、16、25、36、49、64、81、100,...

五边形数是 0, 1, 5, 12, 22, 35, 51, 70, 92, 117, ...

等等……


有众所周知的公式可以计算任何这些数字。要计算第 n 个 s-gonal 数,可以使用公式 (n^2 * (s - 2) - (n * (s - 4))) / 2

我想知道的是,有没有一种有效的方法来检查给定的数字对于给定的 s 是否为 s-gonal?

显而易见的方法是从生成 s-gonal 数的函数中获取连续值,直到找到 n 或值超过 n,但这具有线性时间复杂度。

我知道有一些公式可以用来确定一个数字对于 s 的特定值是否为 s-gonal,但我想要一个适用于任何 s 的公式。

【问题讨论】:

    标签: algorithm language-agnostic number-theory


    【解决方案1】:

    基于Wikipedia's article on Polygonal numbers,我可以提出以下谓词,似乎可以解决我在 OP 提出的问题上遇到的问题:

    def isPolygonal(s, x):
        ''' Check if x is a s-gonal number '''
        assert s > 2 and s % 1 == 0 and x % 1 == 0
        # Determine if x is some nth s-gonal number,
        # fail if n doesn't come out a whole number
        n = (sqrt(8 * (s - 2) * x + (s - 4) ** 2) + (s - 4)) / (2 * (s - 2))
        return n % 1 == 0
    

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2014-04-05
      • 2015-07-26
      • 2021-05-28
      • 2011-06-17
      • 1970-01-01
      相关资源
      最近更新 更多