我的函数不会返回正确的值

时间:2019-05-30 00:00:51

标签: lua prime-factoring

我目前在项目Euler上正在做问题3,在编写返回数字的最大素数的函数时遇到了问题。

我做了两个函数,isprime(number)和maxprime(number)。第一个函数工作得很好,如果一个数字是素数,则返回true,但是梯形函数给了我这个问题。

function maxprime(number)
    maximum = 0
    for i = 2, number - 1 do
        if(number % i == 0 and isprime(i)) then
            if(maximum < i) then
                maximum = i
            end
        end
    end
    return maximum end
end

每次返回0,并且for循环似乎只运行一次。我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

您确定您的isPrime函数返回质数上的true吗?您没有发布isPrime函数的内容,因此很难判断这是否是罪魁祸首。

但是,我要指出的是,您不需要计数到n-1,相反,如tonypdmtr的注释中所述,您可以从n开始并递减计数。这样实际上更好,因为您将返回符合条件的第一个素数。请参见下面的代码:

function isPrime(n)
    for i = 2, n^(1/2) do
        if (n % i) == 0 then
            return false
        end
    end
    return true
end

function maxPrime(n)
    for i = n, 2, -1 do
        if isPrime(i) and (n % i) == 0 then
            return i
        end
    end
end

> print(maxPrime(1449))
> 23
> print(maxPrime(7))
> 7
> print(maxPrime(13))
> 13

希望这对您有所帮助,但是如果您有任何疑问,请随时提问。