【发布时间】:2022-01-12 01:31:12
【问题描述】:
我不确定如何在一个函数中列出数组中的素数。由于可能代码被分成两个函数,我的猜测是这对性能有重大影响。
如何让我下面的代码更有效率?
function prime_check(n)
primes = []
trash = []
for i in 2:n-1
if n%i == 0
push!(trash, 1)
end
end
if length(trash) == 0
push!(primes, n)
end
return primes
end
function prime_list(n)
list = []
for i in 2:n
if length(prime_check(i)) > 0
push!(list, prime_check(i)[1])
end
end
return list
end
【问题讨论】:
-
为什么不使用
Prime.jl? -
从最多 13 个素数的列表开始,并且只对奇数进行迭代会收获很多。但是由于代码正在创建一个素数列表,为什么不尝试除以它们而不是所有数字呢?此外,一旦您发现 n%i == 0 就不需要再尝试任何数字,因此不需要
trash。 -
从不使用
Any[]开始,比如primes = [] -
只有几厘米。 1) 是的,还有优化的空间,其他的cmet已经触及了几个方面。 2)不,用多种方法编写算法本质上并不比用一种方法编写所有算法慢。 3) 设计一个有效的素数测试算法是非常困难的,而且对于大整数,该算法将比你可以让 Julia 的编译器做的任何优化更重要。我建议您研究现有的素性测试算法并编写您喜欢的代码。