【 数学基础】【素数线性筛法--欧拉筛法模板】【普通筛法的优化】
2017-08-19 06:25
253 查看
质数(素数):指大于1的所有自然数中,除了1和自身,不能被其它自然数整除的数
合数:比1大,但不是素数的数称为合数,合数除了被1和自身整除,还能被其它数整除
质因数(素因数或质因子):能整除给定正整数的质数,除1以外,两个没有其它共同质因子的正整数称为互质
1和0既非素数又非合数
先明确一个条件:任何合数都可以表示成一系列素数的积
素数筛法原理:素数的倍数一定不是素数。
实现步骤:用一个boook数组对maxn内的所有数进行标记,1为合数,0为素数,book初始化为0是假设全部数都为素数,从第一个素数2开始,把2的倍数标记为1,然后继续下一轮
欧拉筛法与普通筛法比较,优化之处在于每个合数不会被重复标记,时间复杂度和空间复杂度均为o(n)
参考博客
合数:比1大,但不是素数的数称为合数,合数除了被1和自身整除,还能被其它数整除
质因数(素因数或质因子):能整除给定正整数的质数,除1以外,两个没有其它共同质因子的正整数称为互质
1和0既非素数又非合数
先明确一个条件:任何合数都可以表示成一系列素数的积
素数筛法原理:素数的倍数一定不是素数。
实现步骤:用一个boook数组对maxn内的所有数进行标记,1为合数,0为素数,book初始化为0是假设全部数都为素数,从第一个素数2开始,把2的倍数标记为1,然后继续下一轮
欧拉筛法与普通筛法比较,优化之处在于每个合数不会被重复标记,时间复杂度和空间复杂度均为o(n)
参考博客
#define maxn 100005 #define maxl 1299710 int prime[maxn],book[maxl]; void prime() { int i,sum=0,j; memset(book,0,sizeof(book)); for(i = 2; i < maxl; i ++) { if(!book[i]) prime[sum++] = i; for(j = 0; j < sum; j ++) { if(i*prime[j] >= maxl) break; book[i*prime[j]] = 1; if(i%prime[j] == 0)//保证合数只会被它的最小质因数筛去 ,因此每个数只会被筛去一次 break; } } return; }
相关文章推荐
- 【数学基础】【欧拉函数解析模板】【欧拉筛法实现求1~n】【求单个n】
- 线性筛法(欧拉筛法)求素数
- 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )
- 筛素数-欧拉筛法模板
- 线性筛法(欧拉筛法)求素数
- 使用欧拉筛法求素数和
- 数学_线性筛法建立素数表(HDU_1262)
- (大素数2.1.2.1)UVA 10871 Primed Subsequence(欧拉筛法)
- 关于欧拉筛法和普通筛法
- 【算法-简单数学问题】- 素数表的获取(简单方法和埃式筛法)
- 数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)
- 线性筛素数的欧拉筛法
- CodeForces - 1017F. The Neutral Zone (数学+Bitset存素数+素数筛优化)
- 优化数学基础
- 用欧拉筛法优化斯特尼筛法(质数筛法)
- 蓝桥杯C语言培训4 数学知识的运用 作业 求素数(素数的筛法)
- 常数优化的筛法求N以内素数表(附C语言、Java代码)
- poj2262 Goldbach's Conjecture 素数的欧拉筛法
- (Relax 数论1.11)POJ 1595 Prime Cuts(欧拉筛法: 输出1~n区间中中间的2C个素数)
- 基础数论算法(六) 素数的筛法与质因数分解