计算多边形数字需要一段时间来计算

时间:2015-11-26 12:42:28

标签: python

我创建了一个函数,希望能够创建一个五边形和方形的数字列表。

这是我到目前为止所得到的:

def sqpent(n):
    i = 0
    list = []
    while n >= 0:
        if n == 0:
            list.append(0)
        elif n == 1:
            list.append(1)
        elif (i*i == (i*(3*i-1)//2)):
            list.append(i)
            n -= 1
        i += 1

但是当它超过前两个数字时,似乎需要一段时间才能这样做......

2 个答案:

答案 0 :(得分:2)

您有两个问题:第一个问题是n==0n==1的特殊大小不会减少n,因此会进入无限循环。特殊外壳并不是真正需要的,可以放弃。

第二个也是更重要的一个是,在测试i*i == (i*(3*i-1)//2)中,您假设索引i对于正方形和五边形数字是相同的。但这只会发生在i==0i==1上,因此您无法在此之后找到值。

我建议:

  1. 迭代i而不是n,以简化操作。
  2. i五角形数字并检查它是否为方形数字(例如int(sqrt(x))**2 == x)。
  3. 当您已达到n个号码时停止。

答案 1 :(得分:0)

感谢@ interjay的建议,我想出了这个完美无缺的答案:

import math

def sqpent(n):
    counter = 0
    i = 0
    l = []
    while counter < n:
        x = (i*(3*i-1)//2)
        #print(x)
        if(int(math.sqrt(x))**2 == x):
            #print("APPENDED: " + str(x))
            l.append(x)
            counter += 1
        i += 1
    return l

有关解释:

  • 迭代一个值i,得到第五个五角形数。然后检查它是否是正方形,如果是,则将其附加到我最终返回的列表中。
  • 当计数器达到所需列表中的项目数时,它会执行此操作。