Моя функция не возвращает правильное значение - PullRequest
1 голос
/ 30 мая 2019

В настоящее время я выполняю задачу 3 в проекте Euler и столкнулся с проблемой при написании функции, которая возвращает максимальное простое число числа.

Я создал две функции: isprime (число) и maxprime(число).Первая функция работает просто отлично, возвращая 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 Ответ

1 голос
/ 30 мая 2019

Вы уверены, что ваша функция 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

Надеюсь, это поможет вам, но если у вас есть какие-либо вопросы, не стесняйтесь спрашивать.

...