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;
}