1 条题解

  • 0
    @ 2025-10-11 13:06:51

    我们蒟蒻写暴力依旧徐徐渐进

    直接暴力枚举拿到10pts。

    #include <bits/stdc++.h>
    using namespace std;
    bool f(int x);
    int main(){
        int l,r;
        int cnt = 0;
        
        cin >> l >> r;
        for(int i = l;i<=r;++i){
            if(f(i)){
                ++cnt;
            }
        }
        cout<<cnt<<endl;
    }
    bool f(int x){
        int c = 0;
        for(int i = 2;i<x;++i){
            if(x % i == 0){
                ++c;
            }
        }
        if(c!=0){return false;}
        else {return true;}
    }
    

    即使一顿优化也只能到40pts的水平。

    #include <bits/stdc++.h>
    using namespace std;
    bool f(int x);
    int main(){
        cin.tie(0)->sync_with_stdio(0);
        long long l,r;
        int cnt = 0;
        
        cin >> l >> r;
        for(int i = l;i<=r;++i){
            if(f(i)){
                ++cnt;
            }
        }
        cout<<cnt<<'\n';
    }
    bool f(int x){
        if (x <= 1) return 0;
        if (x == 2) return 1;
        if (x % 2 == 0) return 0;
        for(int i = 2;i<=sqrt(x);++i){
            if(x % i == 0){
                return 0;
            }
        }
        return 1;
    }
    

    所以直接套筛法草过去

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    void sieve(ll l, ll r) {
        vector<bool> p(r - l + 1, 1); 
        if (l == 1) p[0] = 0;
        for (ll i = 2; i * i <= r; ++i) {
            ll start = max(i * i, ((l + i - 1) / i) * i);
            for (ll j = start; j <= r; j += i) {
                p[j - l] = 0;
            }
        }
        int cnt = 0;
        for (ll i = l; i <= r; ++i) {
            if (p[i - l]) cnt++;
        }
        cout << cnt << '\n';
    }
    int main() {
        cin.tie(0)->sync_with_stdio(0);
    
        ll l, r;
        cin >> l >> r;
        sieve(l, r);
    }
    

    信息

    ID
    5890
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    226
    已通过
    26
    上传者