C++ 素数统计:高效判断素数并统计区间内的素数数量
C++ 素数统计:高效判断素数并统计区间内的素数数量
问题描述:
给定两个正整数 A 和 B,求 A 和 B 之间(包括 A 和 B)有多少个素数?
输入描述:
输入 2 行,第一行包含正整数 A,第二行包含正整数 B。约定 2≤A≤B≤ 1000
输出描述:
输出一行,包含一个整数 C,表示找到 C 个素数。
思路:
- 判断素数: 从 2 开始到该数的平方根之间的数依次判断是否能整除该数,如果能整除则不是素数。
- 遍历统计: 遍历 A 到 B 之间的每一个数,对每一个数进行素数判断,如果是素数则计数器加 1。
- 输出结果: 输出计数器的值即可。
代码:
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int main() {
int A, B;
cin >> A >> B;
int count = 0;
for (int i = A; i <= B; i++) {
if (isPrime(i)) {
count++;
}
}
cout << count << endl;
return 0;
}
时间复杂度分析:
- 对于每一个数,判断是否为素数的时间复杂度为 O(sqrt(n))。
- 遍历 A 到 B 之间的所有数的时间复杂度为 O(B-A)。
所以总的时间复杂度为 O((B-A)*sqrt(n))。
由于题目给定的范围是 2≤A≤B≤1000,所以总的时间复杂度是可以接受的。
原文地址: https://www.cveoy.top/t/topic/qoKF 著作权归作者所有。请勿转载和采集!