如何在Java中逐位读取/写入内存

时间:2014-08-23 06:27:40

标签: java

从问题中得出问题:找到所有素数< 10 ^ 9。 我使用了“Eratosthenes的筛子”来解决它,我试图用一位来表示每个数字的状态。所以,以下是我的代码

// 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;

为此目的是否有更好的数据结构?非常感谢你。

1 个答案:

答案 0 :(得分:1)

您可以使用BitSet:

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. */
  }