在 Julia oneliner 中优化性能欧拉问题 12

问题描述 投票:0回答:1

我最近开始使用 Julia(来自 Python)进行编码。 为了练习我的 Julia 技能,我开始解决欧拉问题。 欧拉问题 12 (https://projecteuler.net/problem=12) 并不难解决。

为了让事情变得更困难,我尝试用一行代码解决每个问题,有时还使用辅助函数。

下面的代码给出了正确答案,但表现不佳(需要 3 分钟)。

function factors(n)
    treshold = 500
    counter = 0
    s = sum(1:n)
    for i in 1:s
        if s%i == 0
            counter += 1
        end
    end
    if counter > treshold
        return false
    else
        return true
    end
end

sum(1:maximum(Iterators.takewhile(factors, Iterators.countfrom()))+1)

在 Julia 中加速这个 oneliner 的最佳选择是什么?

performance julia one-liner euler
1个回答
0
投票

最简单的加速是只计数到

isqrt(s)
而不是
s
。与

function factors(n)
    treshold = 500
    counter = 0
    s = sum(1:n)
    for i in 1:isqrt(s)
        if i*i == s
            counter += 1
        elseif s%i == 0
            counter += 2
        end
    end
    if counter > treshold
        return false
    else
        return true
    end
end

这只需要0.07秒。

© www.soinside.com 2019 - 2024. All rights reserved.