问题标题: 酷町堂:3870找错

0
0
已解决
龙舟
龙舟
高级光能
高级光能

事情要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;
}

求找错,在线等,急!!!


0
已采纳
张帆
张帆
中级天翼
中级天翼

你后面如果是for循环遍历

你在前面可以优化一下

把i改成到sqrt(n)

因为大于sqrt(n)的质数筛不出来

j从i*i开始

因为避免重复

张帆在2020-03-15 17:00:31追加了内容

或者在第二个循环中if的下面加上cnt++;

最后输出cnt

还要把前面的a数组改成bool型的就行了

0
龙舟
龙舟
高级光能
高级光能

大佬们快来救救这个在深渊里挣扎的孩子吧!!

0
王子逸
王子逸
新手天翼
新手天翼

或者这样

#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;
}

用三目运算符

 

我要回答