埃拉托斯特尼筛法求素数,埃拉托色尼筛法算法

  埃拉托斯特尼筛法求素数,埃拉托色尼筛法算法

  算法的思想非常简单。找一个表,先划掉1,再划掉2的倍数,然后找到下一个没划掉的数,也就是3,再划掉3的倍数,再找到下一个没划掉的数,也就是5,再划掉5的倍数,再找到下一个没划掉的数,以此类推。被划掉的数不是质数,但被划掉的数是质数。

  #包括iostream

  #包括cstdio

  #包含cstdlib

  #包含算法

  #包括队列

  #包括堆栈

  #包含地图

  #包括cstring

  #包括限制

  #包含cmath

  #包括cctype

  const int INF=0x 3 F3 F3 f 3 f;//1061109567

  typedef long long ll

  #定义埃尔松左,中,右1

  #定义rson m 1,r,rt 11

  使用命名空间std

  int prime[1000];

  int is prime[10000];

  int k=0;

  void doprime(int n)

  {

  for(int I=2;I=n;我)

  {

  if(isprime[i]==0)

  {

  素数[k]=I;

  for(int j=I * I;j=n;j=I)//2 I和I的乘积在i-1之前已经画出来了,就从I * I开始吧,很多题都是在这个模板上做的,但是第二个循环就不一样了。

  {

  is prime[j]=1;

  }

  }

  }

  }

  int main()

  {

  memset(isprime,0,sizeof(is prime));

  doprime(1000);

  int n;

  while(scanf(%d ,n)!=EOF)

  {

  if(isprime[n]==0)

  {

  printf( yes \ n );

  }

  其他

  {

  printf( no \ n );

  }

  }

  返回0;

  }上面的模板不仅可以判断1000以内的数是否是质数,1000以内的所有质数都存储在质数数组中。

  如果只问1000以内的数是不是质数,下面这个就省时间了。

  #包括iostream

  #包括cstdio

  #包含cstdlib

  #包含算法

  #包括队列

  #包括堆栈

  #包含地图

  #包括cstring

  #包括限制

  #包含cmath

  #包括cctype

  const int INF=0x 3 F3 F3 f 3 f;//1061109567

  typedef long long ll

  #定义埃尔松左,中,右1

  #定义rson m 1,r,rt 11

  使用命名空间std

  int is prime[10000];

  void doprime(int n)

  {

  for(int I=2;I * I=n;I )//注意这里小于等于。比如n为25,不等于就会出错。

  {

  if(isprime[i]==0)

  {

  for(int j=I * I;j=n;j=i)

  {

  is prime[j]=1;

  }

  }

  }

  }

  int main()

  {

  memset(isprime,0,sizeof(is prime));

  doprime(1000);

  int n;

  while(scanf(%d ,n)!=EOF)

  {

  if(isprime[n]==0)

  {

  printf( yes \ n );

  }

  其他

  {

  printf( no \ n );

  }

  }

  返回0;

  }

  版权归作者所有:原创作品来自博主MB 62A10 DE EFD 92,转载请联系作者获得授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: