首页 > 后端开发 > C++ > 生成前 N 个素数的最优雅的方法是什么?

生成前 N 个素数的最优雅的方法是什么?

DDD
发布: 2025-01-13 08:12:43
原创
180 人浏览过

What's the Most Elegant Method for Generating the First N Prime Numbers?

优雅生成素数的方法

目标是编写一个函数 generatePrimes(n),返回前 n 个素数。有多种方法可以实现此功能,各有优劣。本文探讨最优雅的方法。

最初的方法通常使用嵌套循环来检查素数。虽然这种方法有效,但由于其重复性和嵌套结构,缺乏优雅性。更巧妙的方法是使用埃拉托斯特尼筛法,其时间复杂度为 O(n log log n)。

埃拉托斯特尼筛法的工作原理是创建一个大小为 n 的布尔数组,所有元素最初都设置为 true。数组索引表示从 0 到 n-1 的数字。算法首先将索引 0 和 1 处的元素设置为 false,因为它们不是素数。然后,对于每个索引 i,它将数组中 i 的所有倍数设置为 false。这个过程对所有索引重复,直到 n 的平方根。数组中剩余的 true 元素表示素数。

以下是埃拉托斯特尼筛法的一种优雅的 Java 实现:

<code class="language-java">public static List<Integer> generatePrimes(int n) {
    if (n <= 0) {
        return new ArrayList<>();
    }
    boolean[] isPrime = new boolean[n + 1];
    Arrays.fill(isPrime, true);
    isPrime[0] = isPrime[1] = false;
    for (int p = 2; p * p <= n; p++) {
        if (isPrime[p]) {
            for (int i = p * p; i <= n; i += p) {
                isPrime[i] = false;
            }
        }
    }
    List<Integer> primes = new ArrayList<>();
    for (int i = 2; i <= n; i++) {
        if (isPrime[i]) {
            primes.add(i);
        }
    }
    return primes;
}</code>
登录后复制

这段代码使用埃拉托斯特尼筛法高效且优雅地生成了前 n 个素数。时间复杂度为 O(n log log n),代码简洁明了,是生成素数的理想选择。

以上是生成前 N 个素数的最优雅的方法是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板