Python 第一个超过五百个除数的三角形数的值是多少

Python 第一个超过五百个除数的三角形数的值是多少,python,python-3.x,Python,Python 3.x,我试图找到有500个除数的三角形数,但我一直得到这个错误。如何解决 import math #I make a list of first 300 prime numbers def compute(): z=[] prime = [True for i in range(1990)] p=2 while(p*p<=1990): if(prime[p]==True): for i in

我试图找到有500个除数的三角形数,但我一直得到这个错误。如何解决

    import math
#I make a list of first 300 prime numbers
    def compute():
      z=[]
      prime = [True for i in range(1990)]
      p=2
      while(p*p<=1990):
        if(prime[p]==True):
            for i in range(p*p,1990,p):
                prime[i]= False
        p=p+1

      for p in range(2,1990):
        if (prime[p]==True):
            z.append(p)

      return(z)
#for counting the number of factors. Here is where I face a problem in the code      
    def countfactor(n):
      initial= n
      factor=1

      for i in range(0,n):
          if z1[i]<=math.sqrt(n):
             power=0
             while(initial%z1[i]==0):
                 initial=initial/n
                 power=power+1
             factor=factor*(power+1)


      if initial>1:
          factor=factor*2

      return(factor)
#function for providing triangle number to the countfactor() function      
    def compute1():
        i=1
        while(True):
            triangle=int(i*(i+1)/2)
            factors =countfactor(triangle)
            print(factors)
            if factors>500:
                print(triangle)
                break
            else:
                i=i+1

    if __name__ == "__main__":
        z1=compute()
        compute1()
导入数学
#我列出了前300个素数
def compute():
z=[]
prime=[范围内i为真(1990)]
p=2
而(p*p500:
打印(三角形)
打破
其他:
i=i+1
如果名称=“\uuuuu main\uuuuuuuu”:
z1=计算()
计算机1()

实际结果应该是76576500,但我得到了错误“列表索引超出范围”。请解释错误以及如何解决它。

我真的很难理解您的代码。您为什么要查找素数

    import math
#I make a list of first 300 prime numbers
    def compute():
      z=[]
      prime = [True for i in range(1990)]
      p=2
      while(p*p<=1990):
        if(prime[p]==True):
            for i in range(p*p,1990,p):
                prime[i]= False
        p=p+1

      for p in range(2,1990):
        if (prime[p]==True):
            z.append(p)

      return(z)
#for counting the number of factors. Here is where I face a problem in the code      
    def countfactor(n):
      initial= n
      factor=1

      for i in range(0,n):
          if z1[i]<=math.sqrt(n):
             power=0
             while(initial%z1[i]==0):
                 initial=initial/n
                 power=power+1
             factor=factor*(power+1)


      if initial>1:
          factor=factor*2

      return(factor)
#function for providing triangle number to the countfactor() function      
    def compute1():
        i=1
        while(True):
            triangle=int(i*(i+1)/2)
            factors =countfactor(triangle)
            print(factors)
            if factors>500:
                print(triangle)
                break
            else:
                i=i+1

    if __name__ == "__main__":
        z1=compute()
        compute1()
这是我在Python3中的解决方案:

import math

# Function that gets rectacle number by number
def get_rectangle_number(i):
  result = (i * (i + 1)) / 2
  return result

# Function that gets all divisors of a numbers
def divisorGenerator(n):
    large_divisors = []
    for i in range(1, int(math.sqrt(n) + 1)):
        if n % i == 0:
            yield i
            if i*i != n:
                large_divisors.append(n / i)
    for divisor in reversed(large_divisors):
        yield divisor

# Init variables
number = 0
rectangle_number = 0
divisors = 0

# While the results has been found, keep searching
while divisors < 500:
  # Loop number
  number += 1

  # Get Rectangle number
  rectangle_number = get_rectangle_number(number)

  # Check count divisors
  divisors = len(list(divisorGenerator(rectangle_number)))

  # Debug
  print('Recatacle number: ', rectangle_number)
  print('Count divisors: ', divisors)

print('Solution:' ,rectangle_number)
导入数学
#函数,该函数逐数字获取矩形编号
def get_矩形_编号(i):
结果=(i*(i+1))/2
返回结果
#获取数字的所有除数的函数
def除数发生器(n):
大除数=[]
对于范围(1,int(math.sqrt(n)+1)内的i:
如果n%i==0:
产量一
如果i*i!=n:
大除数。追加(n/i)
对于反向除数(大除数):
收益因子
#初始变量
数字=0
矩形_编号=0
除数=0
#找到结果后,继续搜索
当除数小于500时:
#循环数
数字+=1
#获取矩形编号
矩形编号=获取矩形编号(编号)
#校验计数除数
除数=len(列表(除数生成器(矩形_编号)))
#调试
打印('Recatacle编号:',矩形编号)
打印('计数除数:',除数)
打印('解决方案:',矩形\编号)

您好--看起来您已经发布了一个代码示例和一个预期/期望的行为。但是,您似乎没有尝试使用调试器逐步检查代码以了解它在做什么。请先这样做,因为它将解决您的问题,或者允许您提供更多详细信息以帮助他人回答问题stion.您需要创建一个。至少,添加完整的错误消息。