如何在Julia中分解一个数?
我试图构建一个函数来分解一个数字。在这个例子中,我使用了数字95和素数列表。结果应该是(5,19)。我做错了什么如何在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
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[]
行。好的,我明白了。你的意思是你不需要全局限定符。是的,我在答案中修正了:)。