【发布时间】:2016-04-07 09:42:25
【问题描述】:
在一次采访中,我被问到了这样的问题:
Write a function to print first n prime numbers
函数如下所示:
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;
}
简单的复杂性分析可以导致O(n√n)
但是面试官说outerloop不会简单地去n,因为例如要找到前100个质数我们需要循环到541(即第100个质数)
那么我们如何表达给定的时间复杂度?
【问题讨论】:
-
附带说明:我更愿意看到
divison*divisor <= number,而不是调用Math.sqrt()并键入强制转换。
标签: java math time-complexity primes asymptotic-complexity