3 条题解
-
0
根据质数的性质:( 为特例,需特判)可得以下代码:
AC code:
#include <bits/stdc++.h> using namespace std; #define ll long long vector<ll> sieve(ll n) { vector<bool> is_p(n + 1, true); is_p[0] = is_p[1] = false; for (ll i = 2; i * i <= n; ++i) { if (is_p[i]) { for (ll j = i * i; j <= n; j += i) { is_p[j] = false; } } } vector<ll> res; for (ll i = 2; i <= n; ++i) { if (is_p[i]) { res.push_back(i); } } return res; } vector<bool> seg_sieve(ll L, ll R, const vector<ll>& primes) { vector<bool> is_p(R - L + 1, true); if (L == 1) { is_p[0] = false; } for (ll p : primes) { ll start = max(p * p, ((L + p - 1) / p) * p); if (start > R) { continue; } for (ll j = start; j <= R; j += p) { is_p[j - L] = false; } } return is_p; } int main() { ll l, r; cin >> l >> r; if (r < 2) { cout << 0 << endl; return 0; } ll sqrt_r = sqrt(r); vector<ll> primes = sieve(sqrt_r); vector<bool> is_p = seg_sieve(l, r, primes); int ans = 0; for (ll i = 0; i <= r - l; ++i) { if (is_p[i]) { ll num = l + i; if (num == 2) { ans++; } else if (num % 4 == 1) { ans++; } } } cout << ans << endl; return 0; }
信息
- ID
- 56
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 21
- 已通过
- 4
- 上传者