【问题标题】:More efficient way to list prime numbers in Julia在 Julia 中列出素数的更有效方法
【发布时间】: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 的编译器做的任何优化更重要。我建议您研究现有的素性测试算法并编写您喜欢的代码。

标签: arrays julia primes


【解决方案1】:

如果你不介意使用一些包来优化你的代码,我推荐使用“Primes.jl”。

要安装它,运行:

Pkg.add("Primes")

来自 Julia REPL。

这个包有一些为因式分解、素数识别、素数生成器等而构建的功能。

Primes.isprime — 函数。

isprime(n::Integer) -> Bool

例子:

julia> isprime(3)
true

希望我对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多