C++ 中分段筛(打印范围内的素数)2025年5月19日 | 阅读 6 分钟 在本文中,我们将讨论 C++ 中的分段筛法(打印给定范围内的素数)。分段筛法是普通筛法算法的优化版本。与普通筛法计算每个此类数字的所有倍数不同,分段筛法仅计算在一定限制内计算出的一些素数的倍数。 分段筛法算法适用于给定范围内的所有大数,建议在搜索素数时使用。当前工作通过将范围划分为较小的块并利用先前计算出的素数来识别这些分区中的非素数来扩展埃拉托斯特尼筛法。 本文重点解释和实现分段筛法算法及其在 C++ 中的应用。 以下是分段筛法算法的步骤。
示例让我们举一个例子来说明 C++ 中的分段筛法(打印给定范围内的素数)。 输出 Enter the range (low high): 10 100 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 说明这个 C++ 程序使用分段筛法算法来计算和显示 [low, high] 范围内的所有素数。首先,让第一个 函数 simpleSieveNum,其工作基于埃拉托斯特尼筛法,旨在获取所有小于或等于 high 的平方根的素数。此函数以跟踪数字素数的方式开发一个名为 mark_Sieves 的布尔 数组,其中非素数设置为 false。素数累积在名为 primeNum 的 向量 类型的数组中。输入初始值称为 segmentedSieve_Num,它为给定范围 [low, high] 创建一个布尔数组 isPrimeNum,并默认将所有索引设置为 true。 这样,simpleSieveNum 生成的素数用于确定每个素数在该范围内的第一个小倍数,并将 isPrimeNum 的倍数和后续值设置为 0。程序遍历 isPrimeNum 数组的另一个元素并打印出素数,并将其与 1 取反。程序通过向用户请求输入并调用分段筛法函数来结束,该函数确实对给定范围进行分段并确定该范围内的所有素数。 优点当上限 R 可以达到数十亿时,分段筛法可以用于大范围的数字 [L, R]。它仍然是内存高效的,因为它不需要存储或处理直到 R 的数字。
缺点分段筛法的几个缺点如下:
结论总之,分段筛法算法属于寻找素数的成本优化算法范围。分段筛法,尽管对于大范围优于简单筛法,但如果范围很广,特别是当 R 达到数十亿时,它将为 [L, R] 的布尔数组消耗大量内存。根据上述观察,它不需要一次存储所有素数,而只存储 L 和 R 之间的素数。这是通过使用称为埃拉托斯特尼筛法的筛法算法预先计算素数来完成的,该算法非常适合大数据集计算。如果将其分解为更具后续性的小问题,它也会更好地工作。 然而,它具有较高的难以理解性和初始成本,这使得它无法用于小范围和简单问题。分段筛法在需要在大区间生成素数并且速度和内存使用的微调满足要求的用途中是一种非常有效的方法。 |
在当今计算领域,处理的数据量和算法的复杂性不断增加,优化内存访问已变得至关重要。优化过程中最核心的挑战在于高效利用计算机的内存层次结构,特别是缓存。...
阅读 15 分钟
简介 C++ 中输入流库的一个重要组成部分是 std::basic_istream::sentry 类,它旨在在执行 I/O 操作之前控制信息流对象的当前条件和能力。Sentry 是一个应用程序类,它确保用户输入操作被执行... ...
阅读 6 分钟
引言 关联矩阵是图论中用于表示图中顶点和边之间关系的基本数据结构。在图中,顶点由行表示,边由关联矩阵中的列表示。矩阵的每个元素...
7 分钟阅读
异字母词(Heterogram)是一个单词、短语或句子,其中每个字母最多使用一次。这是语言学部分的一个好概念,在计算语言学领域和猜谜游戏中将会有很好的应用...
5 分钟阅读
Tarjan 算法是大多数相关图算法的基础,用于找出有向图中的强连通分量 (SCS)。SCC 是图的基本组成部分。因此,分量中的每个顶点都可以到达任何其他...
阅读 15 分钟
Gomory-Hu 树是无向图中任意两对节点之间最小割值的压缩表示。该树可用于非常高效地解决网络流、最小割和连通性类型的问题。在 Gomory-Hu 树中,每条边都表示一个最小割...
阅读 8 分钟
在理解 C++ 中虚函数和纯虚函数之间的区别之前,我们应该了解 C++ 中的虚函数和纯虚函数。什么是虚函数?虚函数是在基类中声明的成员函数,可以在派生类中重新定义...
5 分钟阅读
贝尔菲格数字是数论领域中一个有趣的数字概念,通常以赋予其独特性的属性为特征。与恶魔贝尔菲格相关的数字的数字遵循特定的模式。在本文中,我们将……
阅读 6 分钟
在数论和组合学的领域中,弗罗贝尼乌斯数是源自一个经典数学问题(在娱乐数学中称为硬币问题或鸡块问题)的著名概念。这个问题围绕着确定最大整数的想法……
阅读 8 分钟
简介 C++ 是一种强大的编程语言,因为它拥有丰富的标准库,其中包含各种帮助数学计算的函数和实用程序。特殊数学函数是这些实用程序之一,其中包括 Hermite 多项式。Hermite 多项式在量子力学、概率论和数值分析领域很重要……
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India