【发布时间】:2020-06-01 08:01:39
【问题描述】:
为什么这段代码只能在小于 10^4 的数字上工作?我需要找到所有小于 10^8 的素数,但这显示 arrayindexoutofbound 异常?为什么?我知道我们只能创建数组直到 size10^8(如果我错了,请纠正我)但这甚至不适用于 10^5。
class Prime
{
public static void main (String[] args) throws java.lang.Exception
{
boolean[] prime = new boolean[100000000];
prime[2]=true;
int i;
for(i=3; i<100000000; i+=2)
prime[i]=true;
for(i=3; i<100000000; i++)
{
if(prime[i]==true)
for(int j=i*i; j<100000000; j=j+i)
prime[j]=false;
}
for(i=1; i<100000000; i++)
{
if(prime[i]==true)
System.out.println(i);
}
}
}
【问题讨论】:
-
您永远不会使用一半的阵列。例如,您永远不会访问
prime[4]。您可能还想查看bitset而不是布尔数组。 -
@rossum 我正在使用素数筛,我已经假设除 2 之外的偶数不是素数。
-
@Eran 谢谢。但这不是重点……这只是一个例子……我想为 10^8 个数字运行此代码。
-
@Eran 我想为 10^8 的数字运行它,但任何大于 10^4 的数字都会显示 arrayindexoutofbound 异常。
-
@Eran 您现在可以查看代码并说明为什么显示 arrayindexoutofbound 异常吗?我编辑了帖子
标签: java arrays primes sieve-of-eratosthenes