Вы уверены, что ваша функция 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
Надеюсь, это поможет вам, но если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.