素数

素数和合数

一个数有且仅有 \(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]);
}
posted @ 2024-08-13 21:45  wing_heart  阅读(19)  评论(0)    收藏  举报