結果

問題 No.3485 Find 495-like Number
コンテスト
ユーザー 👑 AngrySadEight
提出日時 2025-12-07 11:39:05
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 299 ms / 5,000 ms
コード長 1,310 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 893 ms
コンパイル使用メモリ 95,776 KB
実行使用メモリ 10,624 KB
最終ジャッジ日時 2026-03-27 20:50:27
合計ジャッジ時間 15,046 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 34
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>
#include <vector>
using namespace std;
using ll = long long;

void solve(ll L, ll R){
    if (R - L >= 45000){
        R = L + 45000;
    }
    vector<vector<ll>> divs(R - L + 1, vector<ll>(0));
    vector<ll> now(R - L + 1);
    for (ll i = L; i <= R; i++){
        now[i - L] = i;
    }

    vector<bool> isprime(23000001, true);
    for (ll i = 2; i <= 23000000; i++){
        if (isprime[i]){
            for (ll j = 2; j * i <= 23000000; j++){
                isprime[j * i] = false;
            }
        }
    }

    for (ll i = 2; i <= 23000000; i++){
        ll min_v = ((L + i - 1) / i) * i;
        for (ll j = min_v; j <= R; j += i){
            while (now[j - L] % i == 0){
                now[j - L] /= i;
                divs[j - L].push_back(i);
            }
        }
    }
    for (ll j = 0; j <= R - L; j++){
        if (now[j] != 1){
            divs[j].push_back(now[j]);
        }
    }

    for (ll j = 0; j <= R - L; j++){
        if (divs[j].size() != 4){
            continue;
        }
        if (divs[j][0] == divs[j][1] && divs[j][1] != divs[j][2] && divs[j][2] != divs[j][3] && divs[j][0] != 2){
            cout << L + j << endl;
            return;
        }
    }
    cout << -1 << endl;
}

int main(){
    ll L, R;
    cin >> L >> R;

    solve(L, R);
}
0