优雅高效地生成素数
在编程领域,寻找一种优雅且高效的方式来生成素数是一个经典挑战。让我们探索一种在简洁性和性能之间取得平衡的方法。
考虑使用素数定理,该定理将小于或等于 n 的素数数量估计为 pi(n) ≈ n / log(n) 。该估计提供了可用于识别素数的筛子大小的上限。
筛法,也称为埃拉托斯特尼筛法,迭代一系列数字并消除所有非 -通过将它们标记为复合素数。对于此任务,我们可以利用 BitSet 来表示素数集合,每个位对应于范围内的一个数字。
下面是这种优雅且高效的素数生成方法的 Java 实现:
<code class="java">public static BitSet computePrimes(int limit) { BitSet primes = new BitSet(); primes.set(0, false); primes.set(1, false); primes.set(2, limit, true); for (int i = 0; i * i < limit; i++) { if (primes.get(i)) { for (int j = i * i; j < limit; j += i) { primes.clear(j); } } } return primes; }</code>
这种方法在典型笔记本电脑上大约一秒内有效地生成前一百万个素数。其精度和速度的结合使其成为在各种计算场景中生成素数的宝贵工具。
以上是如何高效生成素数?的详细内容。更多信息请关注PHP中文网其他相关文章!