結果
問題 |
No.732 3PrimeCounting
|
ユーザー |
![]() |
提出日時 | 2021-12-31 21:36:01 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.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; // }