isPrime算法在输入大小n

时间:2017-05-18 02:02:20

标签: java algorithm

我在下面有一个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;
}

我的问题是:

  1. 该算法的渐近运行时间是多少 大小|| n ||输入?
  2. 解释为何获得的运行时间 输入大小为“1”指数
  3. 这里我不明白为什么这个算法是指数级的。

      

    注意:这个问题是在算法考试中提出的。

1 个答案:

答案 0 :(得分:3)

首先,我们可以看到算法循环遍历单个语句(if语句)最多sqrt(n)次。因此,它的运行时间与n的值的平方根成正比。

现在,问题是关于输入的大小的运行时间,而不是输入的值。输入大小是用于存储输入的存储量。在这种情况下,输入只是一个数字n

数字n,以二进制表示时(此参数在任何其他基数中表示时仍然成立)具有log n位,因此循环sqrt(n)次是指数的输入大小,因为输入大小为log nsqrt(n) = exp(C * log n)C = 0.5

因此,我们所显示的算法在输入的大小是指数的。