📌  相关文章
📜  C++程序使用函数显示两个时间间隔之间的质数(1)

📅  最后修改于: 2023-12-03 14:39:59.890000             🧑  作者: Mango

C++程序使用函数显示两个时间间隔之间的质数

本程序主要实现了通过输入两个时间间隔,输出这两个时间间隔之间所有的质数。下面是程序的详细介绍和代码实现。

程序介绍

使用函数来判断一个数是否是质数,需要遍历这个数的所有可能的因子。但是时间复杂度较高,如果判断的数较大,程序执行时间会比较长。本程序通过优化算法来提高程序的执行效率。

具体而言,即通过“埃拉托色尼筛法”来判断是否是质数。该算法可以快速地找出素数,并且时间复杂度较低。具体的实现可参考下面的代码。

代码实现
#include <iostream>
#include <cmath>
#include <vector>

using namespace std;

// 埃拉托色尼筛法,求出2到max_num之间的所有素数
vector<int> prime_sieve(int max_num) {
    vector<bool> is_prime(max_num + 1, true);
    vector<int> primes;

    // 计算max_num的平方根
    int sqrtn = (int)sqrt(max_num);

    // 从2开始筛选
    for (int i = 2; i <= sqrtn; ++i) {
        if (is_prime[i]) {
            primes.push_back(i);
            for (int j = i * i; j <= max_num; j += i) {
                is_prime[j] = false;
            }
        }
    }

    // 处理剩余的数
    for (int i = sqrtn + 1; i <= max_num; ++i) {
        if (is_prime[i]) {
            primes.push_back(i);
        }
    }

    return primes;
}

// 判断一个数是否是质数
bool is_prime(int num) {
    if (num <= 1) {
        return false;
    }
    else if (num == 2) {
        return true;
    }
    else {
        int sqrtn = (int)sqrt(num);
        for (int i = 2; i <= sqrtn; ++i) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

// 显示两个时间间隔之间的质数
void show_primes(int start, int end) {
    vector<int> primes = prime_sieve(end);
    for (int i = start; i <= end; ++i) {
        if (is_prime(i)) {
            cout << i << " ";
        }
    }
}

int main() {
    int start, end;
    cout << "Please enter the start and end numbers: ";
    cin >> start >> end;
    cout << "The primes between " << start << " and " << end << " are:";
    show_primes(start, end);
    cout << endl;
    return 0;
}
结束语

本程序通过使用“埃拉托色尼筛法”实现了显示两个时间间隔之间质数的功能。希望对您有所帮助。