如何在java中获取表大小2 ^ 32

Bla*_*bla -1 java arrays sieve-of-eratosthenes

我必须进入java protected final static int [] SIEVE = new int [ 1 << 32 ]; 但我不能强迫java.

Max sieve我得到的是2 ^ 26我需要2 ^ 32来结束我的作业.我试过掩码,但我需要SIEVE [n] = k,其中min {k:k | n&k> 2}.

编辑我需要使用筛选器找到2到2 ^ 63-1的因子数,并且筛子必须具有P [n] =具有除以n的最小素数的信息.我知道用筛子可以将因子数量减少到2 ^ 52.但是,如何坚持内容进行练习.

编辑x2问题解决了

Ste*_*n C 7

你不能.一个Java阵列可以具有至多 2^31 - 1元件,因为size阵列的具有适合在一个符号的32位整数.

无论您是在32位还是64位JVM上运行,这都适用.


我怀疑你在作业中遗漏了一些东西.要求能够找到所有素数小于2^32或等于什么?如果是这样的话,他们希望你对待每一个intint[]为32个比特的阵列.2^25如果我的算法是正确的,你需要一个只有整数的数组...

A BitSet是另一个不错的选择.

A LinkedList<Integer>是一个糟糕的选择.它使用的内存大约是相同大小的数组的8倍,并且get(int)对于长列表而言,性能会非常慢......假设您以明显的方式使用它.

如果你想要一些可以有效地使用你可以配置你的JVM使用的内存的东西,那么你应该使用一个int[][]整数数组的数组,int[]实例和你可以做的一样大.


我需要使用Sieve找到2到2 ^ 63-1的因子数,并且筛必须具有P [n] =具有除数n的最小素数的信息.我知道用筛子可以将因子数量减少到2 ^ 52.但是,如何坚持内容进行练习.

我不太确定我理解你.要分解2 ^ 64区域内的数字,您只需要素数最多2 ^ 32 ...而不是2 ^ 52.(2 ^ 64的平方根是2 ^ 32,非素数必须具有小于或等于其平方根的素因子.)

听起来你试图筛选的数量超过你需要的数量.