检查数字是否为质数的算法的时间复杂度是多少?

时间:2019-06-07 05:24:55

标签: algorithm time-complexity big-o

我需要找到一种检查整数是否为质数的算法的时间复杂度?该算法有点不同,它使用while循环来完成其任务

这是Java中的方法:

    public static boolean isPrime(int num) {
        int i = 2;
        boolean isPrime = false;

        while(num % i != 0) {
            i += 1;
        }

        if (num == i) {
            isPrime = true;
        }

        return isPrime;
    }

对于while循环,我有一个比较,而在循环外有一个if语句,if语句将总是运行一次,所以O(1)。现在while循环的big-O是什么?是O(n)吗?

2 个答案:

答案 0 :(得分:2)

您的方法可能会有一些小问题(在下面解决),但是您的方法应该是O(n),其中nisPrime()的输入值/大小。也就是说,在这种蛮力方法中,您基本上只是循环遍历每个小于输入的可能值以找到完全匹配。

我会改写为:

// assuming positive integers only
public static boolean isPrime(int num) {
    if (num == 1) return false;

    boolean isPrime = true;

    for (int i=2; i < Math.sqrt(num); ++i) {
        if (num % i == 0) {
            isPrime = false;
            break;
        }

    return isPrime;
}

我检查输入是否为1,在这种情况下,它不是素数。同样,此方法还有一个好处,就是它最多检查sqrt(num)个可能的除数。除此以外的任何除数都可能无法平均划分,因此检查没有意义。如果找到除数,则从for循环中退出。

答案 1 :(得分:1)

是的,它是O(N)。 N是num