我目前在项目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循环似乎只运行一次。我在这里做什么错了?
答案 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
希望这对您有所帮助,但是如果您有任何疑问,请随时提问。