結果
問題 | No.371 ぼく悪いプライムじゃないよ |
ユーザー |
![]() |
提出日時 | 2016-05-25 01:26:06 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 4 ms / 1,000 ms |
コード長 | 1,340 bytes |
コンパイル時間 | 983 ms |
コンパイル使用メモリ | 70,840 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-30 18:21:41 |
合計ジャッジ時間 | 2,201 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 42 |
ソースコード
#include<iostream> #include<vector> #include<algorithm> #include<cmath> using namespace std; using ll = long long; #define rep(i, j) for(int i=0; i < (int)(j); i++) #define repeat(i, j, k) for(int i = (j); i < (int)(k); i++) #define all(v) v.begin(),v.end() bool solve() { ll L, H; cin >> L >> H; vector<bool> is_prime(sqrt(H) + 1, true); vector<int> primes; { is_prime[0] = is_prime[1] = false; repeat(i, 2, is_prime.size()) { if(is_prime[i]) { for(ll ii = i * 2; ii < (ll)is_prime.size(); ii += i) is_prime[ii] = false; } } rep(i, is_prime.size()) if(is_prime[i]) primes.push_back(i); reverse(all(primes)); } auto min_factor = [&](ll n) { for(auto itr = primes.rbegin(); itr != primes.rend(); itr++) { ll p = *itr; if(p * p > n) break; if(n % p == 0) return (ll)p; } return n; }; for(int p : primes) { for(ll c = H / p; p * c >= L and c >= p; c--) { ll mf = min_factor(p * c); if(mf >= p) { cout << p * c << endl; return 0; } } } return false; } int main() { cin.tie(0); ios::sync_with_stdio(false); while(solve()); return 0; }