如何让我的函数返回正确的值

我正在解决欧拉计划中的问题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 循环似乎只运行一次。我在这里做错了什么?

点赞
用户308010
用户308010

你确定你的 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

希望这样能帮到你,如果你有任何疑问,请随时提问。

2019-05-30 20:16:17