首页 > 解决方案 > 如何在 Julia 中分解一个数字?

问题描述

我正在尝试构建一个函数来分解一个数字。在这个例子中,我使用了数字 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)

标签: julia

解决方案


这是一个固定的功能:

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的元素primesprimes
  • 终止条件应该是number == 1
  • primes如果向量不包含所需的所有素数,则错误处理

请注意,您可以将结果与factorPrimes.jl 包中的函数进行比较(但我猜您希望将此代码作为算法问题)。


推荐阅读