結果
| 問題 | No.3485 Find 495-like Number |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2025-12-07 11:39:05 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 299 ms / 5,000 ms |
| コード長 | 1,310 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
#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);
}