結果
| 問題 |
No.371 ぼく悪いプライムじゃないよ
|
| コンテスト | |
| ユーザー |
KenjiH
|
| 提出日時 | 2016-05-14 01:48:09 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,577 bytes |
| コンパイル時間 | 855 ms |
| コンパイル使用メモリ | 77,324 KB |
| 実行使用メモリ | 10,496 KB |
| 最終ジャッジ日時 | 2024-10-05 21:29:03 |
| 合計ジャッジ時間 | 4,143 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 18 WA * 2 TLE * 1 -- * 21 |
ソースコード
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
using namespace std;
vector<int> getPrimes(int n) {
vector<bool> isPrime(n+1, true);
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++) {
if (!isPrime[i])
continue;
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
int m = 0;
for (int i = 0; i <= n; i++)
if (isPrime[i])
++m;
int pos = 0;
vector<int> ret(m);
for (int i = 0; i <= n; i++)
if (isPrime[i])
ret[pos++] = i;
return ret;
}
map<long long, int> factorize(long long n) {
map<long long, int> ret;
for (long long i = 2; i * i <= n; i++) {
while (n % i == 0) {
++ret[i];
n /= i;
}
}
if (n != 1)
ret[n] = 1;
return ret;
}
int minFac(long long n) {
map<long long, int> facs = factorize(n);
long long ret = facs.begin()->first;
if (ret == n)
return 1;
return (int)ret;
}
int main(int argc, char *argv[])
{
long long l, h;
cin >> l >> h;
vector<int> pr = getPrimes(1e3);
int n = pr.size();
pair<int, long long> ret = make_pair(0, 0);
for (int i = n-1; i >= 0; i--) {
for (int j = i; j < n; j++) {
long long x = pr[i] * pr[j];
if (l <= x && x <= h) {
ret = max(ret, make_pair(pr[i], x));
}
}
if (ret.first)
break;
}
if (!ret.first) {
// this block is executed only if abs(h-l) is enough small.
for (long long i = l; i <= h; i++) {
ret = max(ret, make_pair(minFac(i), i));
}
}
cout << ret.second << endl;
return 0;
}
KenjiH