[英]Java Prime calculator according to Sieve of Eratosthenes
我偶然發現了以下問題:我有一個要獲取並打印1到N之間的所有素數的類。N是您必須自己插入的參數。 當我為N插入10000時,代碼會工作並打印出所有素數(從2到最接近N的素數)。
當我插入40000時,代碼仍然有效。 當我插入50000(或更高版本)時,代碼給出ArrayOutOfBoundsException。 為什么?
這是我使用的代碼:
ArrayList<Integer> priemGetallen = priemGetallen(n);
for (Integer i : priemGetallen) {
System.out.println(i);
}
並使用
ArrayList<Integer> priemgetallen = new ArrayList<Integer>();
for(int i = 2; i < n; i++){
priemgetallen.add(i);
}
for (int i = 2; i < n; i++) {
for (int j = i; j * i <= n; j++) {
if((j*i) < priemgetallen.size()){
priemgetallen.remove(j*i);
}
}
}
return priemgetallen;
}
我收到錯誤的地方是“ priemgetallen.remove(j * i)”。
如果有人能告訴我為什么這不適用於所有大於N的N,我將非常感激。 40000。
提前致謝!
Java int
可以容納的最大值是2,147,483,647,因此當i
和j
達到46,341時j * i
溢出。
要擴展范圍,請將i
, j
和n
的類型更改為long
。
PS您還需要將priemgetallen
更改為Long
而不是Integer
的數組列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.