筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊...
分类:
其他好文 时间:
2014-05-22 18:29:55
阅读次数:
392
素数表在算法中经常会用到,所以掌握一种高效求解素数表的算法是很有必要的。
这里介绍一种算法:筛法。筛法的时间复杂度我不太清楚,但我知道是接近于 O(n) 的,比一般的求解素数的算法效率要高很多,其基本思想如下:
1、要得到 2 — n 之间的所有素数,先记录下 2 — n 之间的所有整数,用集合表示 A = { 2 , 3 , 4 , 5 , 6 …… n }
2、创建一张素数表 P...
分类:
其他好文 时间:
2014-05-22 12:21:52
阅读次数:
201
题目来源:POJ 2478 Farey Sequence
题意:输入n 求 phi(2)+phi(3)+phi(4)+...+phi(n)
思路:用类似筛法的方式计算phi(1), phi(2), ..., phi(n) 再求前缀和
#include
#include
#include
//欧拉phi函数
const int maxn = 1000010;
typedef long...
分类:
其他好文 时间:
2014-05-14 01:05:22
阅读次数:
323
l筛法求素数把从1开始的、某一范围内的正整数从小到大顺序排列,1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。如有:1
2 3 4 5 6 7 89 1011 12 13 14 1516 17 18 19 2021 22 23 24 2526 ...
分类:
其他好文 时间:
2014-05-12 20:24:10
阅读次数:
336
今天在求 1- 200000 内所有的数的质子的时候想到一个优美的算法.
它利用到筛法的特性代码:void solve(){ memset(num,0,sizeof(num)); memset(hs,0,sizeof(hs));
for(int i = 2 ;i <= 2...
分类:
其他好文 时间:
2014-05-09 09:47:11
阅读次数:
244