gpt4 book ai didi

python - Project Euler - 这个haskell代码怎么这么快?

转载 作者:IT老高 更新时间:2023-10-28 21:06:57 27 4
gpt4 key购买 nike

我正在处理项目 euler 中的问题 401,我在 python 中编写了我的解决方案,但它需要几天时间才能运行,显然我需要加快速度或使用不同的方法。我在 Haskell 中遇到了一个看起来与我的 python 解决方案几乎相同但几乎瞬间完成的解决方案。

有人能解释一下它怎么这么快吗? (我不是在寻求帮助或解决问题 401)

divisors n = filter (\x -> n `mod` x == 0) [1..(n`div`2)] ++ [n]
sigma2 n = sum $ map (\x -> x * x) (divisors n)
sigma2big n = sum $ map (sigma2)[1..n]
let s2b = sigma2big 10^15
putStrLn ("SIGMA2(10^15) mod 10^9 is " ++ (show (mod s2b 10^9)))

据我了解,它只是使用试除法生成一个除数列表,对它们进行平方和求和,然后将结果从 1 到 n 求和。

编辑:忘记了我的 python 代码

from time import clock


def timer(function):

def wrapper(*args, **kwargs):
start = clock()
print(function(*args, **kwargs))
runtime = clock() - start
print("Runtime: %f seconds." % runtime)

return wrapper


@timer
def find_answer():
return big_sigma2(10**15) % 10**9

def get_divisors(n):
divs = set()
for i in range(1, int(sqrt(n)) + 1):
if n % i == 0:
divs.add(i)
divs.add(n // i)
return divs

def sigma2(n):
return sum(map(lambda x: x**2, get_divisors(n)))

def big_sigma2(n):
total = 0
for i in range(1, n + 1):
total += sigma2(i)
return total

if __name__ == "__main__":
find_answer()

最佳答案

Prelude> sigma2big 1000
401382971
(0.48 secs, 28491864 bytes)

Prelude> sigma2big 10^3
103161709
(0.02 secs, 1035252 bytes)

Prelude> (sigma2big 10)^3
103161709

函数优先级(嘘...)

关于python - Project Euler - 这个haskell代码怎么这么快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21868427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com