经典结论:一个奇素数能够表示为两个平方数的和,当且仅当这个素数模 4411

特判 2=12+122=1^2+1^2 后上线性筛直接硬冲即可。

#include <bits/stdc++.h>
using namespace std;
int pr[17000012], cnt = 0;
bitset<300000012> ppr;
int up;
int get()
{
    ppr[1] = true;
    for (int i = 2; i <= up; i++)
    {
        if (!ppr[i]) cnt++, pr[cnt] = i;
        for (int j = 1; j <= cnt; j++)
        {
            if (i * pr[j] > up) break;
            ppr[i * pr[j]] = true;
            if (i % pr[j] == 0) break;
        }
    }
    return cnt;
}
int main()
{
    int l, r;
    cin >> l >> r;
    up = r;
    get();
    int ans = 0;
    for (int i = 1; i <= cnt; i++)
        if ((pr[i] & 3) == 1 && pr[i] >= l && pr[i] <= r) ans++;
    if (l <= 2 && r >= 2) ans++;
    cout << ans << endl;
    return 0;
}