Java 打印前n素数的复杂性

Java 打印前n素数的复杂性,java,math,time-complexity,primes,asymptotic-complexity,Java,Math,Time Complexity,Primes,Asymptotic Complexity,在一次采访中,我被问到以下问题: Write a function to print first n prime numbers 函数如下所示: while(true){ 布尔值isPrime=true; 对于(int divisor=2;divisor,回答这个问题需要很高的数学知识,即素数的分布规律。它告诉你()第n个素数的值大约是n.log(n) 那么您的复杂性是O(n√n、 日志(n)√日志(n)) 我可能会发现这个界限是悲观的,因为不是所有的迭代都会运行到√n、 例如,偶数会立即

在一次采访中,我被问到以下问题:

Write a function to print first n prime numbers
函数如下所示:

while(true){
布尔值isPrime=true;

对于(int divisor=2;divisor,回答这个问题需要很高的数学知识,即素数的分布规律。它告诉你()第n个素数的值大约是
n.log(n)

那么您的复杂性是
O(n√n、 日志(n)√日志(n))



我可能会发现这个界限是悲观的,因为不是所有的迭代都会运行到√n、 例如,偶数会立即被检测到。为了更严格的界限,你需要整数的最小因子的分布规律。

回答这个问题需要很高的数学,即素数的分布规律。它告诉你()第n个素数的值大约是
n.log(n)

那么您的复杂性是
O(n√n、 日志(n)√日志(n))



我可能会发现这个界限是悲观的,因为不是所有的迭代都会运行到√n、 例如,偶数会立即被检测到。为了更严格的界限,你需要整数的最小因子的分布规律。

作为旁注:我更愿意看到
除数*除数作为旁注:我更愿意看到
除数*除数,这是一个众所周知的事实。如果你参加了一门涉及ed RSA你可能已经了解了这一点。也许你在简历上声称了类似的东西(例如密码学),然后他们决定测试你。我同意。你可以回答“我不能给出准确的答案,因为我不知道
n
n
-th素数之间的关系”@Yves:我就是这么想的said@giò:点是用来消除歧义的,这就足够了。(你自己建立公式也不会有问题。)这是一个众所周知的事实。如果你参加了一门涉及RSA的密码学课程,你就会了解到这一点。也许你在简历上声称了类似的东西(例如密码学)然后他们决定测试你。我同意。你可以回答“我不能给出一个精确的答案,因为我不知道
n
n
-th素数之间的关系”。@Yves:这就是我想要的said@giò:圆点是用来消除歧义的,应该足够了。(您自己建立公式也不会有问题。)
while (true) {
  boolean isPrime = true; 
  for (int divisor = 2; divisor <= (int)(Math.sqrt(number)); divisor++) {
    if (number % divisor == 0) {
      isPrime = false;      
      break;
    }
  }
  number++;
  if(isPrime) {
    System.out.print(number + " ");
    primes++;
  }

  if (primes == n)
      break;
}