本人刚接触OI,刚学埃式筛法,于是做了这题。
第一次因为忘记用埃式筛法,50分,五个点TLE,但是用了埃式筛法后变成了80分,最后两个点RE,代码:
#include <bits/stdc++.h>
using namespace std;
int e[10000001];
int main()
{
long long a,b,c,d=0;
cin>>a;
for (b=2;b<=a;b++)
{
c=b-1;
if (e[c]==0)
{
d++;
for (int i=b*2;i<=a;i+=b)
{
e[i-1]=1;
}
}
}
cout<<d;
}
改成下面代码后却变成了10分:
#include <bits/stdc++.h>
using namespace std;
int e[10000001];
int main()
{
long long a,b,c,d=0;
cin>>a;
for (b=2;b<=a;b++)
{
c=b-1;
if (e[c]==0)
{
d++;
for (int i=b*b;i<=a;i+=b)
{
if (e[i]==0)
e[i-1]=1;
}
}
}
cout<<d;
}
求大佬们帮看看哪里有问题,谢谢!