我在下面有一个isPrime函数:
public static boolean isPrime(int n) {
if(n == 1) return false;
for(int i = 2; i * i <= n; ++i) {
if(n % i == 0) return false;
}
return true;
}
我的问题是:
这里我不明白为什么这个算法是指数级的。
注意:这个问题是在算法考试中提出的。
答案 0 :(得分:3)
首先,我们可以看到算法循环遍历单个语句(if语句)最多sqrt(n)
次。因此,它的运行时间与n
的值的平方根成正比。
现在,问题是关于输入的大小的运行时间,而不是输入的值。输入大小是用于存储输入的存储量。在这种情况下,输入只是一个数字n
。
数字n
,以二进制表示时(此参数在任何其他基数中表示时仍然成立)具有log n
位,因此循环sqrt(n)
次是指数的输入大小,因为输入大小为log n
,sqrt(n) = exp(C * log n)
为C = 0.5
。
因此,我们所显示的算法在输入的大小是指数的。