21xrx.com
2024-11-10 00:40:33 Sunday
登录
文章检索 我的文章 写文章
C++求素数个数
2023-07-01 00:27:53 深夜i     --     --
C++ 素数 个数

在计算机算法与数据结构中,经常需要求一个给定区间内的素数个数。C++语言具有丰富的算法库,可以快速地实现求素数个数的功能。

下面是一种基于Eratosthenes筛法的求素数个数的算法实现。该算法的时间复杂度为nloglogn,虽然比其他算法略慢,但在实际应用中还是非常实用的。

首先,定义一个整数数组用来标记1~n之间是否是素数。将数组中所有元素初始化为true,然后从2开始遍历数组,对于每一个素数(p),将p的倍数都标记为false,最后扫描整个数组,统计其中为true的元素的个数,即为给定区间内的素数个数。

下面是C++代码实现:

#include

#include

using namespace std;

int countPrimes(int n) {

  vector isPrime(n, true);

  int count = 0;

  for (int i = 2; i < n; i++) {

    if (isPrime[i]) {

      count++;

      for (int j = i + i; j < n; j += i) {

        isPrime[j] = false;

      }

    }

  }

  return count;

}

int main() {

  cout << countPrimes(100) << endl; // 输出25,即1-100之间的素数个数

  return 0;

}

运行上述代码,输出结果为25,即1~100之间的素数个数。

在实际应用中,n可能非常大,此时可以使用线性筛法对算法进行优化。该算法的时间复杂度为O(n),是目前求解素数个数的最优算法之一。

综上所述,C++语言提供了多种算法库和优秀的性能,可以快速实现求解素数个数的功能。对于需要求解该问题的读者,建议较好的选择是以上介绍的两种算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复