結果

問題 No.3127 Multiple of Twin Prime
ユーザー a01sa01to
提出日時 2025-04-30 00:58:43
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 88 ms / 2,500 ms
コード長 1,045 bytes
コンパイル時間 4,899 ms
コンパイル使用メモリ 279,172 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-04-30 00:58:51
合計ジャッジ時間 6,640 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 12
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
  #include "settings/debug.cpp"
#else
  #define Debug(...) void(0)
#endif
#define rep(i, n) for (int i = 0; i < (n); ++i)
using ll = long long;
using ull = unsigned long long;

int main() {
  cin.tie(nullptr)->sync_with_stdio(false);
  bitset<10'000'004> is_prime;
  is_prime.set();
  is_prime[0] = is_prime[1] = false;
  for (int i = 2; i * i <= 10'000'003; ++i) {
    if (is_prime[i]) {
      for (int j = i * i; j <= 10'000'003; j += i) is_prime[j] = false;
    }
  }
  vector<int> twin_primes;
  for (int i = 3; i <= 10'000'000; ++i) {
    if (is_prime[i] && is_prime[i + 2]) twin_primes.push_back(i);
  }
  vector<ll> ans;
  rep(i, twin_primes.size()) {
    int a = twin_primes[i], b = twin_primes[i] + 2;
    ans.push_back((ll) a * b);
  }
  int t;
  cin >> t;
  while (t--) {
    ll n;
    cin >> n;
    auto it = upper_bound(ans.begin(), ans.end(), n);
    if (it == ans.begin()) {
      cout << -1 << '\n';
    }
    else {
      cout << *--it << '\n';
    }
  }
  return 0;
}
0