21xrx.com
2024-09-20 00:11:37 Friday
登录
文章检索 我的文章 写文章
C++如何判断输入数组中的素数
2023-06-29 11:22:23 深夜i     --     --
C++ 输入数组 素数 判断

C++是一种高性能的编程语言,可以很方便地判断输入数组中的素数。在Cpp中,判断一个数字是否为素数的方法主要有两种:暴力枚举和质数筛法。

暴力枚举法又称试除法,即对于一个n,用2~√n之间的所有数去除n,如果n不能被这些数整除,那么n就是素数。这种方法的时间复杂度为O(n^1.5),只适用于较小的数字。

质数筛法是一种用于筛选质数的方法,它的时间复杂度为O(nlog(logn))。其中最著名的就是埃氏筛法和欧拉筛法。

下面示范一下如何用埃氏筛法判断输入数组中的素数:


#include <iostream>

#include <cmath>

using namespace std;

const int MAXN = 1000006; // 输入数组的最大长度

bool is_prime[MAXN] = {0}; // 定义一个标记数组

int main() {

  int n, a[MAXN];

  cin >> n;

  for (int i = 0; i < n; i++) cin >> a[i]; // 输入数组

  is_prime[0] = is_prime[1] = true; // 0和1不是素数

  for (int i = 2; i <= sqrt(MAXN); i++) {

    if (!is_prime[i]) { // 如果i是素数

      for (int j = i * i; j <= MAXN; j += i) {

        is_prime[j] = true; // j是i的倍数,不是素数

      }

    }

  }

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

    if (!is_prime[a[i]]) cout << a[i] << " "; // 输出素数

  }

  return 0;

}

在这段代码中,我们首先定义了一个标记数组is_prime,并将数组中的所有元素初始化为false,因为我们不知道哪些数是素数。

然后,我们输入了一个数组a,并使用埃氏筛法将is_prime中的素数标记为true,最后输出输入数组中的素数。

自此,您已经学会如何使用C++判断输入数组中的素数。但请注意,当数组长度过大时,以上方法的时间复杂度可能会很高,因此需要采用更高效的算法来解决。

  
  

评论区

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