Как факторизовать число в Юлии? - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь построить функцию для разложения числа.В этом примере я использовал число 95 и список простых чисел.Результат должен быть (5, 19).Что я делаю не так?

function factorize(number, primes)
    global factor = Int64[]
    for i in primes
        while number % primes[i] == 0
            push!(factor, primes[i])
            number = number ÷ primes[i]
        end
        if number ÷ primes[i] != 1
            break
        end
    end
    return factor
end

number = 95
primes = (2,3,5,7,11,13,17,19,23, 27, 31)
answer = factorize(number, primes)
println(answer)

1 Ответ

3 голосов
/ 22 мая 2019

Это фиксированная функция:

function factorize(number, primes)
    factor = Int64[]
    for p in primes
        while number % p == 0
            push!(factor, p)
            number = number ÷ p
        end
        if number == 1
            break
        end
    end
    if number > 1
        @warn "factorization failed, not enough primes passed; printing only factors found in primes vector"
    end
    return factor
end

Изменения:

  • вам не нужно global квалификатор
  • запись p in primes возвращает вамэлементы primes, а не индекс в primes
  • условие завершения должно быть number == 1
  • обработка ошибок, если вектор primes не содержит все необходимые простые числа

Обратите внимание, что вы можете сравнить свои результаты с функцией factor из пакета Primes.jl (но я думаю, вы хотели, чтобы этот код был алгоритмической проблемой).

...