素数筛选

今天在面试时被问到了一个问题:求不大于n的最大素数,当时只想出暴力解法,回来查资料找到了正确的求解方法。

素数筛法是这样的:
1. 开一个大的bool型数组prime[],大小就是n+1就可以了.先把所有的下标为奇数的标为true,下标为偶数的标为false.

vector<bool> prime(n+1, true);
for(int i=0; i<n+1; ++i)
  if(i%2 == 0)
    prime[i] = false;
  1. 然后:
      for(int i=3; i<=sqrt(n); i+=2)
      {   if(prime[i]) 
          for( j=i+i; j<=n; j+=i ) prime[j]=false;
      }

3.最后输出bool数组中的值为true的单元的下标,就是所求的n以内的素数了。

背后的原理是:当i是素数的时候,i的所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质
数的倍数筛掉。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天爸爸、我、王伟和小妹妹一起去了方塔园。王伟带了荔枝(毛绿子)、葡萄,我和爸爸空手带(哈哈,其实我们带了水)。 ...
    陈小鱼0314阅读 87评论 0 0
  • 我今天上一年级啦,我很高兴。我今天看到五星红旗啦,还有好多小朋友。我们的学校特别大。
    段智耀阅读 173评论 0 1
  • 其实,没有什么东西是不能放手的。 时日渐远,当你回望,你会发现, 你曾经以为不可以放手东西, 只是生命里的一...
    Sco阿尔法M阅读 112评论 0 0
  • 听着满江沧桑的声音,耳边充斥着火车轰鸣,终于踏上了回家的旅途,我也早已是归心似箭。满身疲惫的躯体携着一颗欢喜的...
    熊猫不闷骚阅读 348评论 2 0
  • 你的一点消息都没有了。 可能, 我忘记了。 你也忘了。 没有山盟海誓, 没有海枯石烂, 没有天涯海角, 有的,只剩...
    136楼兰阅读 406评论 0 1