是什么让这段代码变得如此慢?(对于项目欧拉q45)

Red*_*ana 0 python algorithm math

我刚刚解决并找到了项目euler问题45的答案,但是解决方案需要花费20分钟来计算.其他类似的解决方案需要不到一秒的时间来找到解决方案.

问题

我的代码:

import time

def is_triangular(n):

    triangle_index = (((8 * n + 1) ** 0.5) + 1) / 2
    if triangle_index % 1 == 0:
        return True
    return False

def is_pentagonal(n):

    pentagonal_index = (((24 * n  + 1) ** 0.5) + 1) / 6
    if pentagonal_index % 1 == 0:
        return True
    return False

def is_hexagonal(n):
    hexagonal_index = (((8 * n + 1) ** 0.5) + 1) / 4
    if hexagonal_index % 1 == 0:
        return True
   return False


number = 40756
while True:
    if is_triangular(number) and is_pentagonal(number) and is_hexagonal(number):
        print(number)
        break

    number += 1
Run Code Online (Sandbox Code Playgroud)

Fla*_*ito 5

而不是通过每个数字,并检查其三角形,五边形和六边形.生成六边形数字,并为每个六边形数字检查其三角形或五边形.

您可以使用六边形数字的公式生成六边形数字,并将n增加1.

  • 是的,你是对的.使用发生器产生六边形数字,现在解决方案需要大约20ms才能找到.我真的应该停止依赖纯粹的计算能力. (2认同)