結果

問題 No.3127 Multiple of Twin Prime
ユーザー moaimomoai
提出日時 2025-04-25 22:58:18
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 1,519 bytes
コンパイル時間 5,723 ms
コンパイル使用メモリ 329,964 KB
実行使用メモリ 44,324 KB
最終ジャッジ日時 2025-04-25 22:58:50
合計ジャッジ時間 11,133 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 1 TLE * 1 -- * 10
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
long long int LMINF =  -1e18;
long long int modint = 1000000007;

const int N = pow(10,7);
vector<bool> isp(N+1, true);

void sieve(){
    isp[0] = false;
    isp[1] = false;
    for(long long int i = 2; pow(i,2)<=N; i++){
        if(isp[i]){
            for(long long int j = 2; i*j <= N; j++){
                isp[i*j] = false;
            }
        }
    }
}

int main() {
    int T;
    cin >> T;
    vector<long long int> Case(T);
    for(int i = 0; i < T; i++){
        cin >> Case[i];
    }
    sieve();
    set<long long int> Prime;
    set<long long int> S;
    for(int i = 3; i < pow(10,7); i+=2){
        if(isp[i]){
            Prime.insert(i);
        }
    }
    long long int prev = *begin(Prime);
    long long int check;
    S.erase(prev);
    while(!Prime.empty()){
        check = *begin(Prime);
        if(check == prev+2){
            S.insert(prev*check);
        }
        prev = check;
        Prime.erase(check);
    }
    
    /*
    long long int tmp;
    for(long long int i = 5; i < pow(10,7); i+=2){
        if(isp[i]) {
            if(isp[i-2]){
                tmp = i * (i-2);
                S.insert(tmp);
            }
        }
    }
    */
    int minLimit = *begin(S);
    for(int i = 0; i < T; i++){
        if(Case[i] < minLimit){
            cout << -1 << endl;
        } else {
            auto Itr = upper_bound(S.begin(),S.end(),Case[i]);
            Itr--;
            cout << *Itr << endl;
        }
    }
}
0