📜  C C ++程序查找给定范围之间的素数(1)

📅  最后修改于: 2023-12-03 15:29:41.282000             🧑  作者: Mango

使用C/C++程序查找给定范围之间的素数

本文将介绍如何使用C/C++程序查找给定范围之间的素数。在开始本文之前,建议您了解一些基本的C/C++语法和算法知识。

什么是素数?

素数指的是只能被1和本身整除的自然数(不包括1)。例如,2、3、5、7、11、13等都是素数。

程序实现原理

要查找给定范围之间的素数,可以使用质数筛选法。该方法的基本原理如下:

  1. 先把从2开始的、某一范围内的自然数按顺序排列;
  2. 选取当前最小的素数(即2),然后将其倍数标记成非素数(例如4、6、8等);
  3. 选取当前未被标记为非素数的最小自然数(即3),然后将其倍数标记成非素数(例如9、12、15等);
  4. 重复步骤3,直到目标范围内所有的数字都被标记过;
  5. 那些未被标记为非素数的数字即为素数。
程序实现步骤

下面是实现给定范围之间素数查找的C/C++代码示例,共分为三个步骤。

步骤1:输入范围

本程序要求输入要查找的范围。

#include <iostream>

using namespace std;

int main() {
    int startNum, endNum;
    cout << "请输入要查找的数字范围(起始数字和结束数字之间用空格隔开):";
    cin >> startNum >> endNum;
    return 0;
}
步骤2:使用质数筛选法查找素数

接下来,我们使用质数筛选法查找素数。在此过程中,我们需要使用一个布尔数组标记每个数字是否为素数。

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    int startNum, endNum;
    bool isPrime[100005];
    memset(isPrime, true, sizeof(isPrime)); // 初始化所有数字均为素数
    cout << "请输入要查找的数字范围(起始数字和结束数字之间用空格隔开):";
    cin >> startNum >> endNum;
    if (startNum < 2) startNum = 2; // 从2开始查找
    for (int i = 2; i * i <= endNum; i++) { // 只需要查找到sqrt(endNum)
        if (isPrime[i]) { // 若i为素数,则将i的倍数标记为非素数
            for (int j = i * 2; j <= endNum; j += i) {
                isPrime[j] = false;
            }
        }
    }
    for (int i = startNum; i <= endNum; i++) { // 输出素数
        if (isPrime[i]) {
            cout << i << " ";
        }
    }
    return 0;
}
步骤3:输出素数

最后,我们将所有的素数输出。

#include <iostream>
#include <cstring>

using namespace std;

int main() {
    int startNum, endNum;
    bool isPrime[100005];
    memset(isPrime, true, sizeof(isPrime)); // 初始化所有数字均为素数
    cout << "请输入要查找的数字范围(起始数字和结束数字之间用空格隔开):";
    cin >> startNum >> endNum;
    if (startNum < 2) startNum = 2; // 从2开始查找
    for (int i = 2; i * i <= endNum; i++) { // 只需要查找到sqrt(endNum)
        if (isPrime[i]) { // 若i为素数,则将i的倍数标记为非素数
            for (int j = i * 2; j <= endNum; j += i) {
                isPrime[j] = false;
            }
        }
    }
    cout << "在 " << startNum << " 和 " << endNum << " 之间的素数为:";
    for (int i = startNum; i <= endNum; i++) { // 输出素数
        if (isPrime[i]) {
            cout << i << " ";
        }
    }
    return 0;
}
结语

至此,我们已经完成了使用C/C++程序查找给定范围之间的素数的实现。如果您有任何疑问或建议,欢迎在评论区留言。