91分WA#10求助
查看原帖
91分WA#10求助
469375
Imtking楼主2022/7/20 19:28
#include <iostream>
#include <cstring>
#include <cmath>

using namespace std;

long long p[1000005], cnt;
bool v[1000005];

int main()
{
    long long l, r;
    cin >> l >> r;
    if (l == 1) l = 2;
    for (int i = 2; i <= 50000; ++i)
    {
        if (!v[i])
            p[++cnt] = i;
        for (int j = 1; p[j] && i * p[j] <= 50000; ++j)
        {
            v[i * p[j]] = 1;
            if (i % p[j] == 0)
                break;
        }
    }
    memset(v, 0, sizeof v);
    for (int i = 1; i <= cnt; ++i)
    {
        long long tp = max((long long)(ceil ((double)(l) / (double) (p[i])) * p[i]), (long long)(p[i] << 1));
        for (tp; tp <= r; tp += p[i])
        {
            if (tp - l <= 1000000)
                v[tp - l] = 1;
        }
    }
    int ans = 0;
    for (int i = l; i <= r; ++i)
    {
        if (!v[i - l])
            ++ans;
    }
    cout << ans;
    return 0;
}
2022/7/20 19:28
加载中...