C++ 素数统计:高效判断素数并统计区间内的素数数量

问题描述:

给定两个正整数 A 和 B,求 A 和 B 之间(包括 A 和 B)有多少个素数?

输入描述:

输入 2 行,第一行包含正整数 A,第二行包含正整数 B。约定 2≤A≤B≤ 1000

输出描述:

输出一行,包含一个整数 C,表示找到 C 个素数。

思路:

  1. 判断素数: 从 2 开始到该数的平方根之间的数依次判断是否能整除该数,如果能整除则不是素数。
  2. 遍历统计: 遍历 A 到 B 之间的每一个数,对每一个数进行素数判断,如果是素数则计数器加 1。
  3. 输出结果: 输出计数器的值即可。

代码:

#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,所以总的时间复杂度是可以接受的。

C++ 素数统计:高效判断素数并统计区间内的素数数量

原文地址: https://www.cveoy.top/t/topic/qoKF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录