线性筛素数
线性筛素数是一种常用的判断素数的方法,与传统方法相比,时间复杂度更优,O(n),属于空间换时间的思想。其复杂度相比传统
| 时间 | 空间 | |
|---|---|---|
| 传统方法 | O(n sqrt n) | O(1) |
| 普通筛 | O(n log log n) | O(n) |
| 线性筛 | O(n) | O(n) |
非常适合大规模的询问(打板子),总体消耗不大。貌似又叫欧拉筛。普通筛也叫埃氏筛。
//貌似是这样撒
Talk is cheap, show me the code
int prime[100001]; //prime[1...100001]表示素数,prime[0]为计数器,统计素数个数
bool mark[maxn]; //mark[i]=true表示i不是素数
void getPrime(int n) {
//0, 1 均不是素数
mark[0] = mark[1] = true;
for(int i=2; i<=n; i++)

线性筛素数是一种O(n)时间复杂度的素数判断方法,节省空间,适合大规模查询。它也被称为欧拉筛。通过避免重复删除,线性筛提高了效率。更新的内容指出,每个合数应被其最小质因数筛掉,当i%prime[j]==0时,prime[j]即为i*prime[j]的最小质因子,避免了冗余操作。这区别于埃氏筛,使得在处理大数时速度更快。
最低0.47元/天 解锁文章
1717

被折叠的 条评论
为什么被折叠?



