质数筛选方法(埃拉托斯特尼筛法)
2015-07-10 20:59
369 查看
今天刷题刷了这么一道题,
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million.
大概意思是10以内的质数加法和为 2 + 3 + 5 + 7 = 17,接着求2000000以内质数加法的和。
分析:要求2000000内质数的和,首先得把2000000内的质数表示出来,我用了上篇博客的方法,呵呵,半天没跑出来,这就说明方法不对,上网搜了搜,发现埃氏筛法,它主要是用来求某个数以内的质数。比如n以内的质数,先取其开方,然后从2开始筛选,先去掉2的倍数,接着去掉3的倍数,接着去掉5的倍数,。。。,持续下去,从小到大一直到n的开方,把所有质数的倍数全部去掉,就是n内的所有质数了。
此题的解题方法为:
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17. Find the sum of all the primes below two million.
大概意思是10以内的质数加法和为 2 + 3 + 5 + 7 = 17,接着求2000000以内质数加法的和。
分析:要求2000000内质数的和,首先得把2000000内的质数表示出来,我用了上篇博客的方法,呵呵,半天没跑出来,这就说明方法不对,上网搜了搜,发现埃氏筛法,它主要是用来求某个数以内的质数。比如n以内的质数,先取其开方,然后从2开始筛选,先去掉2的倍数,接着去掉3的倍数,接着去掉5的倍数,。。。,持续下去,从小到大一直到n的开方,把所有质数的倍数全部去掉,就是n内的所有质数了。
此题的解题方法为:
// test10.cpp : 定义控制台应用程序的入口点。 //埃氏筛法 /* 详细列出算法如下: 列出2以后的所有序列: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 标出序列中的第一个素数,也就是2,序列变成: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 将剩下序列中,划掉2的倍数,序列变成: 2 3 5 7 9 11 13 15 17 19 21 23 25 如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列中所有的数都是素数,否则回到第二步。 本例中,因为25大于2的平方,我们返回第二步: 剩下的序列中第一个素数是3,将主序列中3的倍数划掉,主序列变成: 2 3 5 7 11 13 17 19 23 25 我们得到的素数有:2,3 25仍然大于3的平方,所以我们还要返回第二步: 现在序列中第一个素数是5,同样将序列中5的倍数划掉,主序列成了: 2 3 5 7 11 13 17 19 23 我们得到的素数有:2,3,5 。 因为23小于5的平方,跳出循环. */ #include "stdafx.h" #include <iostream> #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { long num=2000000; int sq=sqrt(num*1.0)+1; bool *isPrime=new bool[num+1]; //初始化 for(long i=2; i<num+1; i++) { isPrime[i]=true; } for(long i=2; i<sq; i++) { if(isPrime[i]==true) { for(long j=2; j<num+1; j++) { if(j%i==0 && i!=j) { isPrime[j]=false; } } } } long long sum=0; for(long j=2; j<num+1; j++) { if(isPrime[j]==true) { sum=sum+j; } } cout<<sum<<endl; delete []isPrime; system("pause"); return 0; }结果就不贴了。
相关文章推荐
- 继承(代码体现)
- php mysql_fetch_array与mysql_fetch_assoc区别
- 移动开发者们,是时候使用HTML5了!
- 数据类型和运算符(三)
- 多个文本文件两两碰撞相同内容
- 我开通新的博客啦!
- awk简明教程
- 【DP/单调栈】关于单调栈的一些题目(codevs 1159,codevs 2673)
- 轻松几步,让Visual Stdio 2010 支持Html5
- Unique Binary Search Trees
- mysql 随机更新表里的几条数据
- 设计模式读书笔记:Iterator(迭代器)
- 单例模式 简单工厂模式
- 安装和配置网络存储服务器tgtadm
- UILabel自适应高度
- Unity学习笔记 之 触发Unity UI 的 Button 事件 的代码记录
- Web
- java线程的疑问???
- runLoop和runtime的分析
- ACM-数据结构-并查集