Java素数计算器,根据Eratosthenes筛

Java素数计算器,根据Eratosthenes筛,java,algorithm,primes,sieve,Java,Algorithm,Primes,Sieve,我偶然发现了以下问题:我有一个类来获取和打印1到N之间的所有素数。N是一个你必须自己插入的参数。当我为N插入10000时,代码工作并打印出从2到最接近N的素数的所有素数 当我插入40000时,代码仍然有效。当我插入50000(或更高)时,代码会给出一个ArrayOutOfBoundsException。为什么? 这是我使用的代码: ArrayList<Integer> priemGetallen = priemGetallen(n); for (Integer i

我偶然发现了以下问题:我有一个类来获取和打印1到N之间的所有素数。N是一个你必须自己插入的参数。当我为N插入10000时,代码工作并打印出从2到最接近N的素数的所有素数

当我插入40000时,代码仍然有效。当我插入50000(或更高)时,代码会给出一个ArrayOutOfBoundsException。为什么?

这是我使用的代码:

  ArrayList<Integer> priemGetallen = priemGetallen(n);
        for (Integer i : priemGetallen) {
              System.out.println(i);
        }
ArrayList priemGetallen=priemGetallen(n);
for(整数i:priemGetallen){
系统输出打印LN(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;
  }
ArrayList priemgetallen=new ArrayList();
for(int i=2;i对于(int j=i;j*iJava
int
可以容纳的最大值是2147483647,因此当
i
j
达到46341时,
j*i
溢出

要扩展范围,请将
i
j
n
的类型更改为
long


另外,您还需要将
priemgetallen
更改为
Long
的数组列表,而不是
Integer
一个Java
int
可以容纳的最大值是2147483647,因此当
i
j
达到46341时,
j*i
溢出

要扩展范围,请将
i
j
n
的类型更改为
long


另外,您还需要将
priemgetallen
更改为
Long
数组列表,而不是
Integer

您还必须将
priemgetallen.add(i);
更改为
priemgetallen.add((int)i);
list.add()
需要一个int@NPE谢谢!当别人告诉你的时候,这一切看起来都很合乎逻辑,而你自己想出来却很难。请投不可侵犯的一票。你还必须更改
priemgetallen.add(i);
priemgetallen.add((int)i);
因为
List.add()
需要一个int@NPE谢谢!当别人告诉你这件事的时候,这一切似乎都是合乎逻辑的,而你自己却很难想到。有一个不可侵犯的投票权。替换
j*i替换
j*i