素数筛法
2013-05-31 17:53
239 查看
我也蠢蠢欲动,写个素数筛法。有一些问题必须先存储一个素数表,然后查表。
这时就要用到素数筛。具体的筛法见代码,具体原理这两篇文章有很好的介绍:
http://blog.aikilis.com/1299.html
http://blog.aikilis.com/1287.html
我的代码主要是用bit做合数标记,在素数范围较大时能够有效地节省内存。
这时就要用到素数筛。具体的筛法见代码,具体原理这两篇文章有很好的介绍:
http://blog.aikilis.com/1299.html
http://blog.aikilis.com/1287.html
我的代码主要是用bit做合数标记,在素数范围较大时能够有效地节省内存。
#include <stdio.h> #include <math.h> #define MAXN 1000000 int f[MAXN/32+1]; int prime[87000]; // 1.2 * MAXN / ln( MAXN ) int cnt = 0; #define TEST( n ) ( f[n>>5] & (1<<(n&31) ) ) #define SET( n ) ( f[n>>5] |= (1<<(n&31)) ) void sieve( int x ) { int rt = sqrt( (double)x ) + 1; prime[cnt++] = 2; for( int i = 3; i <= x; i += 2 ) { if( !TEST(i) ) { prime[cnt++] = i; if( i < rt ) for( int j = i * i; j <= x; j += i ) SET( j ); } } } int main() { sieve( 1000000 ); printf( "cnt = %d\n", cnt ); return 0; }
相关文章推荐
- 素数筛法系列之2 分段筛法思想
- 算法之素数筛法
- 素数筛法
- 素数判定 & 素数筛法 & poj_3292_Semi-prime H-numbers
- 数论专题小结:素数筛法
- POJ_3421_X-factor Chains(素数筛法)
- 线性素数筛法模板
- hdoj 1431 素数回文【素数筛法+回文数判断打表】
- 数论知识点2——素数筛法-HDOJ 2136
- 素数筛法
- luogu 1865 数论 线性素数筛法
- 素数筛法
- nefu 582 素数判定(素数筛法和基本法双排)
- POJ 2689 Prime Distance【素数筛法】
- 素数筛法(素筛)
- 【区间范围素数筛法】POJ - 2689 Prime Distance
- C语言:素数筛法与分解素因数
- 素数筛法打表模板
- 素数筛法系列之3 减少筛次数
- hdu1431 2138 素数筛法的应用