此代碼可以正常計數直到n的素數。問題是當n值大到1000000或更多時,那麼執行和打印輸出需要很長時間(超過30秒)。我想解決這個問題。任何幫助都會很棒。 下面是代碼:計算素數直到N
public class PrimeNotillN {
public static void main(String[] args) {
int n = 1000;
int count = 0;
for (int i = 2; i < n; i++) {
boolean res = checkprime(i);
if (res == true)
count++;
}
System.out.println("total prime number till " + n + " is " + count);
}
private static boolean checkprime(int n) {
if (n == 1)
return false;
else {
for (int i = 2; i <= n/2; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
}
如果沒有根本改寫,這是不可修復的。例如改變算法。你正在使用最慢的方法之一... –
你可能想研究[Eratosthenes的篩選](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)。 –
減少執行時間的一種簡單而快速的方法是改變你的'for'循環,每次增加'i' 2(跳過檢查偶數)。請注意,這需要從3開始,而不是從2開始,最初是'count = 1;'。 – River