问题标题: 酷町堂:超时超在哪?

0
0
已解决
杜智宸
杜智宸
中级光能
中级光能

#include<iostream>

#include<cstdio>

#include<cmath>

#include<cstring>

#include<string>

#include<ctime>

#include<algorithm>

#include<iomanip>

#include<stack>

#include<queue>

using namespace std;

int a[10000010];

int main(){

    int n;

cin>>n;

a[1]=1;

for(int i=2;i<=n;i++){

    if(a[i]==0){

        for(int j=i*2;j<=n;j+=i){

            a[j]=1;

            }

        }

    }

    int cnt=0;

    for(int i=1;i<=n;i++){

        if(a[i]==0) cnt++;

    }

    cout<<cnt;

return 0;

}

https://ke.codingtang.com/#/problem/problemSub?id=3870


0
已采纳
余彦文
余彦文
初级光能
初级光能

这个不用埃氏筛,每个题目都有合适的方法。

即使个你一个无限大的数组,你还是会超时。

因为n最大是10000000,你最多会循环50000000000000次

远远的超过了100000000

建议直接循环找质数,cnt++

0
曲天歌
曲天歌
高级光能
高级光能

你加这么多头文件干嘛

0
0
董宇昊
董宇昊
初级启示者
初级启示者

头文件差评  数组小一点

int数组的最大值:a[5000*5000]

0
徐子宸
徐子宸
中级天翼
中级天翼

头文件你加这么多!!!

数组老师没给你讲过吗,最大25000000

我要回答