簡體   English   中英

檢查數字是否為質數的算法的時間復雜度是多少?

[英]What is the time complexity of the algorithm to check if a number is prime?

我需要查找檢查整數是否為質數的算法的時間復雜度是多少? 該算法有點不同,因為它使用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)嗎?

您的方法可能會有一些小問題(在下面解決),但是您的方法應該是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循環中斷。

是的,它是O(N) 其中N是num

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM