如何在Java中从内存逐位读/写
问题是从以下问题中得出的:找到所有<10^9的素数。 我用“埃拉托斯提尼筛”来解决这个问题,我试着用一个比特来表示每个数字的状态。下面是我的代码如何在Java中从内存逐位读/写,java,Java,问题是从以下问题中得出的:找到所有(i%8)&0x1)==0){ 结果.添加(i); 对于(int j=2;i*j
// n is the input integer
byte[] allNum = new byte[n/8 + 1];
ArrayList<Integer> result = new ArrayList<Integer>();
for (int i = 2; i < n; i++) {
if ((allNum[i/8]>>(i%8) & 0x1) == 0) {
result.add(i);
for (int j = 2; i*j < n; j++) {
allNum[i*j/8] |= 1 << i*j%8;
}
}
}
return result;
//n是输入整数
字节[]allNum=新字节[n/8+1];
ArrayList结果=新建ArrayList();
for(int i=2;i>(i%8)&0x1)==0){
结果.添加(i);
对于(int j=2;i*j
位集复合=新位集(n+1);
对于(int i=2;我已经试过BigIntege了。嗨,Adi。谢谢你的建议。我试过了,效果很好。但是,移位大量位(比如1M)似乎需要很长时间。
BitSet composites = new BitSet(n + 1);
for (int i = 2; i <= n; ++i)
if (!composites.get(i)) {
... /* It's prime. */
for (int multiple = 2*i; multiple > 0 && multiple <= n; multiple+=i)
composites.set(multiple); /* Strike out every i-th number. */
}