- P56's solution
P56's Solution
- 2025-9-4 21:59:43 @
经典结论:一个奇素数能够表示为两个平方数的和,当且仅当这个素数模 余 。
特判 后上线性筛直接硬冲即可。
#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;
}