线性筛素数
线性筛素数是一种常用的判断素数的方法,与传统方法相比,时间复杂度更优,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++)
{