素数
素数和合数
一个数有且仅有 \(1\) 和它本身两个因子,这个数是素数,因此 \(1\) 不是素数。
线性筛法
每个数只会被最小的质因子筛到。
复杂度 \(O(n)\) 。
Code
#include<bits/stdc++.h>
#define ll long long
#define pf printf
#define sf scanf
using namespace std;
const int N=1e6+7,M=1e7;
int can[N];
int p[M];
void primes(int n){
for(int i=2;i<=n;i++){
if(!p[i]){
p[i]=i;
can[++can[0]]=i;
}
for(int j=1;j<=can[0];j++){
if(can[j]>p[i]||(ll)can[j]*i>n) break;
p[can[j]*i]=can[j];
}
}
}
int main(){
int n=M;
primes(n);
pf("%d\n",can[0]);
}
本文来自博客园,作者:wing_heart,转载请注明原文链接:https://www.cnblogs.com/wingheart/p/18357763

浙公网安备 33010602011771号