你不能。Java 数组最多可以有元素 2^31 - 1
,因为size
数组的 必须适合带符号的 32 位整数。
这适用于您在 32 位或 64 位 JVM 上运行。
我怀疑你在作业中遗漏了一些东西。是否要求能够找到所有素数小于2^32
或什么?如果是这种情况,他们希望您将每int
一个int[]
视为 32 位数组。你需要一个只有2^25
整数的数组才能做到这一点......如果我的算术是正确的。
ABitSet
是另一个不错的选择。
ALinkedList<Integer>
是一个糟糕的选择。它使用的内存大约是相同大小的数组的 8 倍,而且get(int)
对于一个长列表,它的性能将会非常缓慢......假设你以明显的方式使用它。
如果你想要一些可以有效使用尽可能多的内存的东西,你可以配置你的JVM,那么你应该使用一个int[][]
整数数组的数组,int[]
实例尽可能大。
我需要使用 Sieve 找到从 2 到 2^63-1 的因子数,并且 sieve 必须具有 P[n]= 是除数为 n 的最小素数的信息。我知道用筛子我可以将数字分解为 2^52。但是如何在坚持内容的情况下进行练习。
我不确定我是否理解你。要分解 2^64 范围内的数字,您只需要 2^32 以内的素数 ...而不是 2^52。(2^64 的平方根是 2^32,非素数的素数必须小于或等于其平方根。)
听起来您正在尝试筛选比您需要的更多的数字。