AcWing 868. 筛质数 --质数个数+每个数的最小质因子
原题链接
简单
作者:
Jocelin
,
2021-03-17 15:34:25
,
所有人可见
,
阅读 423
#include<iostream>
using namespace std;
const int N = 1000010;
int prime[N],cnt;//prime存我们的质数,cnt是质数的个数、
bool st[N]; //当前有没有被筛过
int minp[N];//存下每个数的最小质因子
int get_primes(int n) // O(n)
{
for(int i =2; i <=n ;i++)
{
if(st[i] == 0) minp[i] = i,prime[cnt++] = i;
//从小到大把i倍的质数筛掉,筛掉的一定是合数,且用其最小值因子筛的
for(int j =0; i * prime[j] <= n; j++)
{
st[ i * prime[j] ] = true;
minp[ i * prime[j] ] = prime[j]; //合数的最小质因子
//如果prime[j]为i的最小质因子就break;
if( i % prime[j] == 0)
break;
}
}
return cnt;
}
int main()
{
int n;
cin >> n;
cout << get_primes(n) ;
return 0;
}