我必須找到小於或等於給定數字n
的質數數量。我正在使用Eratosthenes的篩子來尋找素數。使用篩子查找質數小於LONG的數字
這是我寫的代碼:
static int find_prime(int n) {
boolean[] arr = new boolean[n+1];
Arrays.fill(arr, true);
for(int i=2;i<=n;i++) {
if(arr[i]==true) {
for(int j=2*i; j<=n; j+=i)
arr[j] = false;
}
}
int count=0;
for(int i=2;i<=n;i++) {
//System.out.print(arr[i]+" ");
if (arr[i] == true)
count++;
}
return count;
}
此代碼非常適用於integer
價值,但我要實現它long
數字。而Java不允許創建long
大小數組,因此boolean[] arr = new boolean[n+1];
不起作用。 有人可以建議我一種方法來解決這個問題嗎?
[Java array with 4gb elements]可能重複(http://stackoverflow.com/questions/878309/java-array-with-more-than-4gb-elements) – azurefrog
你已經購買了10 [ Exabytes](http://www.whatsabyte.com/)爲你的篩選,對吧? – dasblinkenlight
還有更多節省空間的方法來存儲一系列布爾值。例如,一個位域。另外,你並不需要在篩中代表偶數。 – khelwood