21xrx.com
2024-09-17 04:43:24 Tuesday
登录
文章检索 我的文章 写文章
C++欧拉筛:输出1000以内所有素数
2023-06-29 12:37:44 深夜i     --     --
C++ 欧拉筛 1000 素数 输出

C++中的欧拉筛是一种高效的算法,可用于查找一定范围内的所有素数。在本文中,我们将使用欧拉筛来输出1000以内的所有素数。

欧拉筛是一种基于质数筛法的算法,其核心思想是用一个布尔数组来标记每个数是否为素数。我们从2开始遍历数组,首先将所有的偶数标记为非素数,然后从3开始,若当前数字未被标记,则将其标记为素数,并将其倍数标记为非素数。具体实现方法如下:


bool isPrime[1001];

void EulerSieve() {

  memset(isPrime, true, sizeof(isPrime));

  isPrime[0] = isPrime[1] = false;

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

    if (isPrime[i]) {

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

        isPrime[j] = false;

      }

    }

  }

}

在该算法中,我们首先使用memset函数将所有数字标记为素数。然后将0和1标记为非素数。接着,我们从2开始遍历数组,若当前数字为素数,则将其倍数标记为非素数。由于偶数已在最开始被标记为非素数,因此我们的遍历可以从3开始。

最后,我们可以在main函数中调用欧拉筛函数,并输出1000以内的所有素数:


int main() {

  EulerSieve();

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

    if (isPrime[i])

      cout << i << " ";

    

  }

  return 0;

}

经过测试,该程序可以输出1000以内的所有素数,包括2和997。使用欧拉筛算法可以大大提高查找素数的效率,因此在需要查找多个数是否为素数时,可以优先考虑使用欧拉筛算法。

  
  

评论区

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