結果
問題 |
No.3127 Multiple of Twin Prime
|
ユーザー |
|
提出日時 | 2025-04-25 22:09:40 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 102 ms / 2,500 ms |
コード長 | 1,308 bytes |
コンパイル時間 | 4,812 ms |
コンパイル使用メモリ | 390,592 KB |
実行使用メモリ | 7,844 KB |
最終ジャッジ日時 | 2025-04-25 22:09:50 |
合計ジャッジ時間 | 7,064 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 12 |
ソースコード
#include <iostream> #include <cstdint> #include <vector> #include <algorithm> using namespace std; static inline constexpr vector<int64_t> prepare() { vector<bool> is_prime(10'000'000, true); is_prime[0] = is_prime[1] = false; for (uint32_t i = 2; i != 10'000'000; ++i) if (is_prime[i] && static_cast<uint64_t>(i) * i < 10'000'000) for (uint32_t j = i * i; j < 10'000'000; j += i) is_prime[j] = false; vector<int64_t> candidates; candidates.reserve(10'000'000); for (uint32_t i = 9'999'999; i != 3; i -= 2) if (is_prime[i] && is_prime[i - 2]) candidates.push_back(static_cast<int64_t>(i - 2) * i); candidates.push_back(-1); return candidates; } static inline constexpr vector<int64_t> solve(const uint32_t& T, const vector<int64_t>& N) { const vector<int64_t>& candidates = prepare(); vector<int64_t> ans(T); for (uint32_t i = 0; i != T; ++i) ans[i] = *lower_bound(candidates.begin(), candidates.end(), N[i], greater<int64_t>()); return ans; } static inline void output(const uint32_t T, const vector<int64_t>& ans) { for (uint32_t i = 0; i != T; ++i) cout << ans[i] << '\n'; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); uint32_t T, i; cin >> T; vector<int64_t> N(T); for (i = 0; i != T; ++i) cin >> N[i]; output(T, solve(T, N)); return 0; }