【发布时间】:2023-03-29 05:36:02
【问题描述】:
我刚刚在项目 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
【问题讨论】:
-
你为什么要做所有这些
% 1计算? -
如果你不使用,那么导入
time有什么用?除非这只是您的代码的一部分并且您在其他地方使用它? -
% 1不会像您认为的那样做。如果你想检查它是否可整除,那么你需要% 2 == 0而不是/ 2,% 6 == 0而不是/ 6,等等。 -
对于初学者,您只能计算一次
(((8 * n + 1) ** 0.5) + 1)。但是知道项目欧拉问题,蛮力不是解决方案。你必须找到一些标准来避免计算所有的数字 -
和项目欧拉一样,有一些分析解决方案:mathworld.wolfram.com/HexagonalPentagonalNumber.html