如果我的一半解决方案太慢,我是否会从Project Euler学到任何东西?

时间:2013-08-17 04:37:22

标签: algorithm optimization language-agnostic

这些问题似乎主要包含两个部分:第一,找出如何处理问题,采取什么步骤,需要什么功能,什么变量,计数器等等,第二,优化系统到能够处理巨大的数字。

似乎我只是有一个更快的功能,比如找到素数,我就可以将它插入我当前的“解决方案”中并回过头来回答大概二十个或更多我不得不跳过的问题,因为我的“解决方案”需要一个不合理的时间来得到答案(但它会得到答案)。事实上,我试图从头开始提出一切(我确信我理解它是如何工作的),我确信我的公式是次优的。

第二个优化部分是整个挑战吗?我还应该自豪吗?查找一些选择素数和分解函数,然后将它们复制粘贴到我当前太慢的解决方案中,是否会作弊?

1 个答案:

答案 0 :(得分:3)

如果认为这是作弊,那只会作弊。我不。事实上,我开始研究素数和整数分解,就像你现在一样。

顺便说一句,这是一个简单的函数,可以找到小于 n 的素数;该算法是由Cyrene的Eratosthenes在两千多年前发明的:

function primes(n)
    sieve := makeArray(2..n, True)
    for p from 2 to n
        if sieve[p]
            output p
            for i from p*p to n step p
                sieve[i] := False

这是一个使用试验部门找到数字 n 因子的简单函数:

function factors(n)
    f := 2
    while f*f <= n
        while n % f == 0
            output f
            n := n / f
        f := f + 1
    if n <> 1 output f

有很多方法可以改善这两种功能。如果您对使用素数编程感兴趣,我在我的博客上谦虚地推荐这个essay