結果
| 問題 |
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;
}