【问题标题】:What would be the time complexity for this naive method finding n prime numbers?这种寻找 n 个素数的简单方法的时间复杂度是多少?
【发布时间】:2021-07-23 03:54:02
【问题描述】:
class Primes
  def initialize
    @primes = []
  end

  def prime_iterative(n)
    i = 2
    while @primes.size < n do
      @primes << i if is_prime?(i)
      i += 1
    end
    @primes
  end
  
  def is_prime?(n)
    @primes.each { |prime| return false if n % prime == 0 }
    true
  end
end

primes = Primes. new
puts primes.prime_iterative 10

它找到 n 个素数,而不是所有小于 n 的素数。我无法确定上限

【问题讨论】:

    标签: ruby algorithm time-complexity big-o primes


    【解决方案1】:

    所以这是素数的试除法,效率低于埃拉托色尼筛法。

    它检查每对素数的可分性,所以肯定是 Ω(n²)。

    它也是 O(n² log n),因为第 n 个素数是 (1 + o(1)) n log n,悲观地,我们将直到第 n 个素数的每个数字除以前 n 个素数。

    我们可以通过观察每个复合 c 有一个素数因子 ≤ √c 来将这个分析加强到 O(n²)(因此是 Θ(n²)),因此如上所述,素数需要 O(n²) 时间,复合只取 O(n log n √(n/log n)) 因为每个都有一个素因子 ≤ O(√(n log n)),这意味着我们检查 O(√(n log n)/log √(n log n)) = O(√(n/log n)) 素数。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 2013-10-05
      • 2017-07-02
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多