如何在Julia中分解一个数?

如何在Julia中分解一个数?,julia,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 ÷ prime

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

这是一个固定的功能:

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
    会返回
    primes
    的元素,而不是
    primes的索引
  • 终止条件应为
    number==1
  • 如果
    素数
    向量不包含所需的所有素数,则进行错误处理

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

我很确定这不是您要寻找的答案,但您可以通过运行
导入Pkg;包装添加(“素数”)
因子(95)
你说得对。我不想用包裹。我只关注
projecteuler
。是的,这是一个取自
projecteuler
的算法问题。我在您的代码中没有看到任何
global
限定符。因为我删除了它。这是在你的代码中的
global factor=Int64[]
行。好的,我明白了。你的意思是你不需要
全局
限定符。是的,我在答案中修正了:)。