质数算法大全,及C 程序实现优化详解 筛选法 三木追风 质数的定义 一个数,如果只有1 和它本身两个因数,这样的数叫做质数,又称素数
在上文 《素数算法大全,及C 程序实现优化详解 (一) 试除法》中我们已经探讨了求解素数的一类算法,并且将试除法从最初的低效版本优化的高效的V2
那么,还有没有其它更佳算法呢
这就是下面三藏要和大家探讨的内容 合数过滤筛选法 算法描述:我们知道,素数N 不能被 2~(N-1)间的任何数整除;反过来看,只要能被 2~(N-1)间的任何数整除的N,都不是素数
所以我们可以采用一个简单的排除法:就是对 N 以内的所有数,只要逐个去除值为 2~(N-1)的倍数的数,剩下的就是素数
C 语言实现 // 合数过滤筛选法 Ver1 // 参数:n 求解n 以内(包括 n)的素数 // 返回值:n 以内素数个数 int CompositeNumFilterV1(int n) { int i, j; // 素数数量统计 int count = 0; // 分配素数标记空间,结合后文思考为何+1 char* flag = (char*)malloc( n+1 ); // 初始化素数标记 for (i=2; i