Julia 返回内存不足错误的最大素因子算法
我正试图通过欧拉计划学习朱莉娅。对于最大的素因子问题,我遇到了一个内存不足的问题,我不明白为什么 我在Python中尝试了相同的解决方案,没有任何问题Julia 返回内存不足错误的最大素因子算法,julia,Julia,我正试图通过欧拉计划学习朱莉娅。对于最大的素因子问题,我遇到了一个内存不足的问题,我不明白为什么 我在Python中尝试了相同的解决方案,没有任何问题 function Primes(n) numbers = Set{Int64}(2:n) primes = Int64[] while length(numbers)!=0 p = pop!(numbers,minimum(numbers)) push!(primes,p)
function Primes(n)
numbers = Set{Int64}(2:n)
primes = Int64[]
while length(numbers)!=0
p = pop!(numbers,minimum(numbers))
push!(primes,p)
if length(numbers)!=0
numbers = setdiff(numbers,Set{Int64}(2*p:p:maximum(numbers)))
end
end
return primes
end
function LPF(n)
primes = Primes(n//2)
for p in primes
if n%p==0
return p
end
end
end
LPF(600851475143)
这是我的错误消息:
OutOfMemoryError()
Stacktrace:
[1] _growend! at .\array.jl:811 [inlined]
[2] resize! at .\array.jl:1003 [inlined]
[3] rehash!(::Dict{Int64,Nothing}, ::Int64) at .\dict.jl:183
[4] sizehint! at .\dict.jl:242 [inlined]
[5] sizehint! at .\set.jl:64 [inlined]
[6] union!(::Set{Int64}, ::UnitRange{Rational{Int64}}) at .\abstractset.jl:79
[7] Type at .\set.jl:10 [inlined]
[8] Primes(::Rational{Int64}) at .\In[14]:2
[9] LPF(::Int64) at .\In[24]:2
[10] top-level scope at In[25]:1
您正试图创建一个包含大约
300*10^9
条目的集合-您不太可能有那么多内存。有趣的是,Python能够分配这么多内存(您是否也使用了相同的n
和方法?)?我知道我可以用一个包来解决这个问题,但这让我感到很困扰,因为我清楚地记得以前用python解决过这个问题——这个问题并不要求你生成素数,而是要找到n
的因式分解。但是,如果您想首先尝试列出所有素数,请注意n
不能被大于isqrt(n)
的素数整除。我的教程中给出了生成小素数的示例代码。谢谢。我一定会阅读你的教程,不仅仅是素数算法!我需要所有我能得到的帮助朱莉娅:P