📅  最后修改于: 2023-12-03 14:39:59.890000             🧑  作者: Mango
本程序主要实现了通过输入两个时间间隔,输出这两个时间间隔之间所有的质数。下面是程序的详细介绍和代码实现。
使用函数来判断一个数是否是质数,需要遍历这个数的所有可能的因子。但是时间复杂度较高,如果判断的数较大,程序执行时间会比较长。本程序通过优化算法来提高程序的执行效率。
具体而言,即通过“埃拉托色尼筛法”来判断是否是质数。该算法可以快速地找出素数,并且时间复杂度较低。具体的实现可参考下面的代码。
#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;
}
本程序通过使用“埃拉托色尼筛法”实现了显示两个时间间隔之间质数的功能。希望对您有所帮助。