21xrx.com
2024-11-22 07:56:51 Friday
登录
文章检索 我的文章 写文章
C++语言详解 - 筛法求素数
2023-07-05 10:47:46 深夜i     --     --
C++ 筛法 素数

C++语言是一种广泛应用于软件开发和计算机编程的高级编程语言。它被广泛用于开发游戏、移动应用程序、桌面应用程序、操作系统和嵌入式系统等各种应用场景。在C++语言的众多特性中,筛法求素数是一项非常重要的功能。

筛法求素数是一个古老而著名的算法,它是用于找出给定范围内所有素数的一种方法。它的基本思想是从小到大枚举每一个数字,如果这个数字是素数,那么就用它去筛掉所有它的倍数。这样,剩下的数字就都是素数了。

下面是C++语言实现筛法求素数的例子:


#include <iostream>

#include <cstdio>

#include <cstring>

#define MAXN 1000000

using namespace std;

int prime[MAXN],vis[MAXN];

// prime 数组存储筛出的素数

// vis 数组用于做标记

void Prime(int n)

{

  int cnt = 0;

  memset(vis,0,sizeof(vis));

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

  {

    if(!vis[i])

    {

      prime[++cnt] = i;

    }

    for(int j=1; j<=cnt && i*prime[j]<=n; j++)

    {

      vis[i*prime[j]] = 1;

      if(i % prime[j] == 0)

      

        break;

      

    }

  }

}

int main()

{

  int n;

  scanf("%d",&n);

  Prime(n);

  for(int i=1; i<=n; i++)

  {

    if(!vis[i])

    {

      printf("%d ",i);

    }

  }

  return 0;

}

在这个例子中,我们使用了一个布尔数组 vis 来标记所有不是素数的数字。在主函数中,我们读入 n 的值,调用 Prime(n) 函数得到从 2 到 n 的所有素数。然后我们遍历 vis 数组,输出所有不是素数的数字。

总的来说,筛法求素数可以帮助我们有效地找出给定范围内所有素数。它是计算机科学中的一项非常基础但也很重要的技术。如果你想学习更多有关C++语言的知识,请查阅相关教程和文献。

  
  

评论区

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