Lua 我的功能赢得了';t返回正确的值

Lua 我的功能赢得了';t返回正确的值,lua,prime-factoring,Lua,Prime Factoring,我目前正在做Euler项目的问题3,在编写返回数字的最大素数因子的函数时遇到了一个问题 我做了两个函数,isprime(数字)和maxprime(数字)。第一个函数工作得很好,如果一个数是素数,则返回true,但梯形函数给了我问题 函数maxprime(数字) 最大值=0 对于i=2,数字-1 do 如果(数字%i==0和isprime(i)),则 如果(最大值

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

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

函数maxprime(数字)
最大值=0
对于i=2,数字-1 do
如果(数字%i==0和isprime(i)),则
如果(最大值

它每次返回0,for循环似乎只运行一次。我做错了什么?

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

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

iPrime的内容在哪里,以及您如何调用
maxprime
?您需要提供一个完整的工作示例,以便我们了解问题(您有两个
end
语句产生语法错误,但除此之外,代码是有效的)。为什么这里有end“return maximum end”?还要再次检查您的isprime()函数代码,因为没有isprime()函数,for循环似乎工作正常。您如何知道循环只运行一次?假设您的
isprime()
工作正常,为什么不将i=number的
函数maxprime(number)设为i=number,1,-1如果isprime(i)则返回i end