Euler筛法用于素数筛选
来源:互联网 发布:直播app数据库设计 编辑:程序博客网 时间:2024/05/20 19:31
Euler筛法
介绍
这是复杂度非常低的一个素数筛法,大部分资料显示时间复杂度仅为
标准代码
void euler_sieve(int n) { totPrimes = 0; for (int i = 2; i <= n; i++) { if (!flag[i]) primes[totPrimes++] = i; for (int j = 0; i * primes[j] <= n; j++) { flag[i * primes[j]] = true; if (i % primes[j] == 0) break; } }}
解释
首先很容易看出,
那么怎么做才能只筛一次?关键是找出每个合数的独一无二的特性,根据这个特性去筛.
重要结论
每个合数
- 它是一个素数.
- 它比
Factormax 的所有因数都要小.
即
证明如下:
首先假设
P 不是素数,那么就有P=P1P2⋯Pn ,其中P1,P2⋯Pn,P1<P2<⋯<Pn 为素数.于是肯定有
Factormax⋅P1 比Factor 要大,那么Factormax 就不是最大的因数了,which contradicts the definition.再者,我们设
Factormax=P1P2⋯Pn ,假设P>P1 ,那么显然PP2⋯Pn 要比Factor 更大,which contradicts the definition.
由这个结论引出的Euler筛
假设有一个素数表
根据以上结论,我们对于一个数,把它作为另一个数最大因子,那么显然可以根据已有的质数表产生一些合数. 并且我们知道这些合数显然只有一种产生方法(只有一个
根据 prime[n]∣i 来判定是否完全枚举
当
- Euler筛法用于素数筛选
- 素数筛(筛选法求素数)
- 素数筛选法(素数筛)
- 素数筛选法-Eratosthenes筛法优化
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- Eratoshenes素数筛选法
- 素数--超强筛选法
- 素数筛选法
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 筛选法求素数
- 素数筛选法
- 素数筛选法2
- MySQL面试题目
- Lesson05_python03之 元组(tuple)
- RNN循环神经网络中的权重更新算法-BPTT
- <context:annotation-config/>,<mvc:annotation-driven/>和<context:component-scan>之间的关系
- [9] 正则表达式
- Euler筛法用于素数筛选
- 从CSS理解LESS
- Angular 指令
- [Algorithm] BST问题
- 使用Linq查询数据进行分页时遇到的性能问题
- java面试总结
- bzoj 3211: 花神游历各国 && bzoj 3038: 上帝造题的七分钟2
- Java并发编程二
- android 自定义控件的几种形式