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问题解决了
你不能.一个Java阵列可以具有至多 2^31 - 1元件,因为size阵列的具有适合在一个符号的32位整数.
无论您是在32位还是64位JVM上运行,这都适用.
我怀疑你在作业中遗漏了一些东西.要求能够找到所有素数小于2^32或等于什么?如果是这样的话,他们希望你对待每一个int的int[]为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,非素数必须具有小于或等于其平方根的素因子.)
听起来你试图筛选的数量超过你需要的数量.
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |