P3912 素数个数
链接: link.
一来想到了欧拉筛,写出来T了6个点,看题解发现可以用欧拉筛,开始找问题,结果:注意map耗时,map改数组后不会T,但是会MLE,需要将
s
t
st
st的
i
n
t
int
int改为
b
o
o
l
bool
bool,最后AC。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e8+10;
bool st[maxn];
int prime[maxn];
int main()
{
int n;
scanf("%d",&n);
//map<int ,int>st,prime;
int cnt=0;
for(int i=2;i<=n;i++)
{
if(st[i]==0) prime[cnt++]=i;
for(int j=0;prime[j]<=n/i;j++)
{
st[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
printf("%d\n",cnt);
}