21xrx.com
2024-12-23 00:30:39 Monday
登录
文章检索 我的文章 写文章
使用筛法求2~200的素数——C++实现
2023-07-06 01:41:31 深夜i     --     --
筛法 素数 2~200 C++ 实现

在计算机编程中,素数一直是一个热门话题。素数是指只能被1和自身整除的数,如2、3、5、7等。而非素数则被称为合数,如4、6、8、9等。在本文中,我们将通过使用筛法来求解2~200的素数,并使用C++语言来实现。

首先,我们需要了解什么是筛法。筛法是一种用于筛选出素数的算法,也被称为埃拉托斯特尼筛法。它的基本思想是从2开始,每次取最小的质数p,将p的倍数标记为合数。然后不断取下一个质数,重复上述操作,直到筛完所需的数为止。这种方法的效率比试除法高得多,因为大量非素数被一次性剔除。

接下来,我们用C++来实现这个算法。首先,我们要定义一个布尔类型的数组,其中每个元素表示该位置所对应的数是否为素数。然后,我们需要进行两层循环,将数组中的元素赋值为true,然后从第二个数2开始,循环至最大数200,将每个质数的倍数在数组中标记为false。最后,我们输出所有为true的元素的索引值,即为2~200之间的素数。

下面是我们的C++代码实现:


#include <iostream>

using namespace std;

int main() {

  const int max_num = 200;

  bool is_prime[max_num + 1];

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

    is_prime[i] = true;

  }

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

    if (is_prime[i]) {

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

        is_prime[j] = false;

      }

    }

  }

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

    if (is_prime[i])

      cout << i << " ";

    

  }

  cout << endl;

  return 0;

}

运行这段代码后,我们会得到如下输出结果:


2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199

这就是在2~200之间的所有素数。

综上所述,我们使用了筛法来求解2~200之间的素数,并且通过C++语言来实现了这个算法。这种算法的优秀效率可以使我们很快地求得大量素数,对于一些需要素数的计算问题来说是非常有价值的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章