Algorithm 计算查找第一个'的时间复杂度;n';素数

Algorithm 计算查找第一个'的时间复杂度;n';素数,algorithm,big-o,time-complexity,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) S

查找第一个“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 + " ");
}
while(数字回答2:
对于0就复杂性而言,减去1没有效果(这是一个非正式的介绍)。
(实际上是
楼层(√n) -1
  • 你有n-1个术语。 添加√n-1次:

    √n+√n+√n+…+√n=(n-1)√n(请注意,这不是一个完整的答案,它只是将@molbdnilo答案相加)

    考虑这一点:


    1+2+3+…+n=n*(n+1)/2
    -->时间复杂度是
    O(n*(n+1)/2==O(n^2)
    eventhough
    (n*(n+1)/2)它是否需要sqrt(i)或sqrt(i)-1个步骤并不相关,这只是一个常数。如果你把n个常数因子加起来,你会得到所有的sqare根-n,并且
    O(n*log(n))
    O(n*log(n)-n)
    相同,因为您只需要查看最高术语。对于您的第一个答案,复杂性√i-1是用来求数是否为素数,但要求到n的所有数,我取n√n次循环将运行n次,每次都需要√i-1检查该数字是否为素数,因此总体为n√n、 我希望我回答了你的疑问。那是错的,你需要保留两个计数器来打印前n个数字。第100个素数是541,例如“的和”√在1和n之间的n是n√n、 “请解释一下这个愉快的时刻:sqrt(n)+…+sqrt(n)=n*sqrt(n)。就像5次:4+4+4+4+4=5*4=20一位谷歌面试官给了我这个问题,他说n√n不可能是正确的答案,因为外循环不是简单的n。也就是说:如果我们需要打印第一个n素数,外循环当然会大于n。例如打印第一个100素数,第100个素数是541,大于n。我们如何解决这个问题?这里有一些混淆(我一开始没有发现).问题询问了第一个
    n
    primes,但问题中的(断开的)代码和书中的引文与primes
    
    
    √2 + √3 + √4 + ... + √n <= √n + √n + √n + ... + √n <= n√n