站外题求调
  • 板块学术版
  • 楼主2021zjhs005
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/1/14 10:47
  • 上次更新2024/1/14 13:21:24
查看原帖
站外题求调
1121995
2021zjhs005楼主2024/1/14 10:47

rt,每次输入若干个数 nn,到 00 结束。

求每个 [1,n][1,n] 之间有多少个素数。

n≤107n\le 10^7,输入的组数 ≤104\le 10^4。

样例

输入:

1
10
65
100
0

输出:

0
4
18
25

求调

本蒟蒻用埃氏筛法求解(我们那个老师很奇怪,因为我成绩优异让我每周找 55 道题发题解给他),但是输出是 xx 个很大的数,埃氏筛法前后的 ans1ans_1 竟然会变,可埃氏筛法并没有用 ansans 数组。

欧拉筛法先写起来,到时候做不出来用它。

求大佬解释原因。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e4+1,MAXN=1e7+1;
ll i,j,n,ans[MAXN];
bool isprime[N];
void Eratosthenes(){
    cout<<ans[1]<<endl;
    isprime[1]=1;
    for(i=2;i<=(10000000/i);i++)
        if(!isprime[i])
            for(j=i*i;j<=MAXN;j+=i) isprime[j]=1;
    cout<<ans[1]<<endl;
    for(i=1;i<MAXN;i++)
        ans[i]=ans[i-1]+(!isprime[i]);
}
int main(){
    Eratosthenes();
    while(cin>>n){
        if(!n) break;
        cout<<ans[n]<<endl;
    }
    return 0;
}
2024/1/14 10:47
加载中...