计算找到第一个' n'素数

时间:2015-08-28 12:00:27

标签: algorithm big-o time-complexity

找到第一个' n'素数是:

while (number <= n) {
  boolean isPrime = true; 
  for (int divisor = 2; divisor <= (int)(Math.sqrt(number)); divisor++) {
    if (number % divisor == 0) {
      isPrime = false;      
      break;
    }
  }
  if(isPrime) 
    System.out.print(number + " ");
}

这本书&#34; java编程简介&#34;,为这个算法计算big-O:

由于在for循环中需要√i步骤来检查数字i是否为素数,因此该算法采用√2+√3+√4+ ... +√n步骤来查找所有素数小于或等于n。

观察,

√2+√3+√4+ ... +√n&lt; =n√n

因此,该算法的时间复杂度为O(n√n)。

阙:

1。他说,&#34;在for循环中需要√i步骤来检查数字i是否为素数&#34;。

你认为不应该是(√i-1)步骤。

2. 请说明如何

√2+√3+√4+ ... +√n&lt; =n√n

(我知道如果你用一个随机数替换&#39; n&#39;我需要解释),这种关系就成立了。

3 个答案:

答案 0 :(得分:7)

  1. 复杂性,减去1没有效果(这是一个非正式的介绍) (实际上是floor(√n) - 1。)
  2. 你有n - 1个词。 添加√n - 1次:

    √n+√n+√n+ ... +√n=(n-1)√n&lt; =n√n

  3. 由于√2,√3,√4,......都小于√n,因此

    √2 + √3 + √4 + ... + √n <= √n + √n + √n + ... + √n <= n√n
    

答案 1 :(得分:1)

回答2:

表示0&lt; i&lt; = n我们有i&lt; = n,因此√i&lt; =√n,因此i的总和为1和n <= 1和n之间的√n之和√n+ √n... +√n,n次

答案 2 :(得分:0)

(注意这不是一个完整的答案,只是为了加入@molbdnilo回答)

考虑一下:

1 + 2 + 3 + ... + n = n * (n+1) / 2 - &gt;时间复杂度为O(n*(n+1)/2) == O(n^2) eventhough (n * (n+1) / 2) <= (n^2)

现在考虑一下@molbdnilo解释的内容;

  

由于√2,√3,√4,......都小于√n,因此

     

√2+√3+√4+ ... +√n&lt; =√n+√n+√n+ ... +√n&lt; =n√n

希望它能解决一些疑虑