結果
| 問題 | No.732 3PrimeCounting |
| コンテスト | |
| ユーザー |
HaraTakashi
|
| 提出日時 | 2021-12-31 21:36:01 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 442 ms / 3,000 ms |
| コード長 | 2,339 bytes |
| 記録 | |
| コンパイル時間 | 2,024 ms |
| コンパイル使用メモリ | 197,804 KB |
| 最終ジャッジ日時 | 2025-01-27 08:09:33 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 89 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<int, int>;
using T = tuple<int, int, int>;
#define al(a) a.begin(), a.end()
#define ral(a) a.rbegin(), a.rend()
#define sz(a) (int)a.size()
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rrep(i, n) for (int i = 1; i <= (n); ++i)
#define drep(i, n) for (int i = (n)-1; i >= 0; --i)
#define db(a, b) cout << #a << ": " << a << " " << #b << ": " << b << endl;
const int MX = 330005;
vector<int> primes;
vector<bool> is_prime(MX, true);
void sieve() {
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= MX; ++i) {
if (is_prime[i]) {
primes.push_back(i);
for (int j = 2 * i; j <= MX; j += i) { is_prime[j] = false; }
}
}
}
vector<int> cnt(MX);
int main() {
int n;
cin >> n;
sieve();
ll ans = 0;
// for (int c = 2; primes[c] <= n; ++c) {
// int b = c - 1;
// rep(a, b) cnt[primes[a] + primes[b]]++;
// for (int y = c + 1; primes[y] <= primes[c] * 3; ++y) {
// ans += cnt[primes[y] - primes[c]];
// }
// }
rrep(i, sz(primes)) {
int c = primes[i];
if (c > n) break;
int b = primes[i - 1];
rep(j, i - 1) {
int a = primes[j];
cnt[a + b]++;
}
rep(j, sz(primes)) {
int sum = primes[j];
if (sum - c >= 0) ans += cnt[sum - c];
}
}
cout << ans << endl;
return 0;
}
// int main() {
// int n;
// cin >> n;
// set<int> s;
// const int MAX_N = 300005;
// bool is_prime[MAX_N];
// for (int i = 0; i <= n; ++i) { is_prime[i] = true; }
// is_prime[0] = is_prime[1] = false;
// for (int i = 2; i <= n; ++i) {
// if (is_prime[i]) {
// s.insert(i);
// for (int j = 2 * i; j <= n; j += i) { is_prime[j] = false; }
// }
// }
// map<int, int> mp;
// mp[0] = 1;
// rep(ri, 3) {
// map<int, int> pre;
// swap(pre, mp);
// for (auto [x, val] : pre) {
// for (auto p : s) {
// if (n < p) break;
// mp[x + p] += val;
// }
// }
// }
// ll ans = 0;
// for (auto [x, val] : mp) {
// if (s.count(x)) ans += val;
// }
// cout << ans << endl;
// // map<P, int> mp;
// // mp[P(1,0)] = 1;
// // for (auto [x,val] : mp) {
// // auto &[]
// // for (auto p : s) {
// // }
// // }
// return 0;
// }
HaraTakashi