![](/img/trans.png)
[英]What is the time complexity for this algorithm which finds every prime number up to n
[英]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)
,其中n
是isPrime()
的輸入值/大小。 也就是說,在這種蠻力方法中,您基本上只是循環遍歷每個小於輸入的可能值以找到精確匹配。
我將重寫為:
// 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.