作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从问题得出问题:找到所有 < 10^9 的素数。我用“埃拉托斯特尼筛法”来解决,我尝试用一位来表示每个数字的状态。所以,以下是我的代码
// 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;
是否有更好的数据结构用于此目的?非常感谢。
最佳答案
您可以使用 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. */
}
关于java - 如何在Java中从内存中逐位读取/写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25459112/
我是一名优秀的程序员,十分优秀!