高级光能
事情要6小时22分之前说起
那时天气晴朗,阳光明媚,我的心情贼好。。。。。。
行了,不多bb了
大佬们来帮我看一下3870用今天学的埃氏筛法做咋超时了??
我的代码:
#include<iostream>
#include<cmath>
using namespace std;
long long a[10000010];
int main()
{
int n,cnt=0;
cin>>n;
for(int i=2;i<=n;i++)
{
if(a[i]==0){
for(int j=i*2;j<=n;j+=i){
a[j]=1;
}
}
}
for(int i=2;i<=n;i++)
{
if(a[i]==0){
cnt++;
}
}
cout<<cnt;
return 0;
}
求找错,在线等,急!!!
中级天翼
你后面如果是for循环遍历
你在前面可以优化一下
把i改成到sqrt(n)
因为大于sqrt(n)的质数筛不出来
j从i*i开始
因为避免重复
张帆在2020-03-15 17:00:31追加了内容
或者在第二个循环中if的下面加上cnt++;
最后输出cnt
还要把前面的a数组改成bool型的就行了
新手天翼
或者这样
#include<iostream>
#include<cmath>
using namespace std;
long long a[10000001];
int main()
{
int n,cnt=0;
cin>>n;
for(int i=2;i<=sqrt(n);i++)
{
if(a[i]==0){
for(int j=i*i;j<=n;j+=i){
a[j]=1;
}
}
}
for(int i=2;i<=n;i++)
{
a[i]==0?cnt++:cnt;
}
cout<<cnt;
return 0;
}
用三目运算符