結果
問題 | No.371 ぼく悪いプライムじゃないよ |
ユーザー |
![]() |
提出日時 | 2016-07-15 10:26:07 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 169 ms / 1,000 ms |
コード長 | 1,531 bytes |
コンパイル時間 | 1,017 ms |
コンパイル使用メモリ | 86,552 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-30 18:24:19 |
合計ジャッジ時間 | 2,638 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 42 |
ソースコード
/* -*- coding: utf-8 -*- * * 371.cc: No.371 ぼく悪いプライムじゃないよ - yukicoder */ #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<string> #include<vector> #include<map> #include<set> #include<stack> #include<list> #include<queue> #include<deque> #include<algorithm> #include<numeric> #include<utility> #include<complex> #include<functional> using namespace std; /* constant */ const int MAX_P = 100000; /* typedef */ typedef long long ll; typedef vector<int> vi; /* global variables */ bool primes[MAX_P + 1]; /* subroutines */ void gen_primes(int maxp, vi &pnums) { memset(primes, true, sizeof(primes)); primes[0] = primes[1] = false; int p; for (p = 2; p * p <= maxp; p++) if (primes[p]) { pnums.push_back(p); for (int q = p * p; q <= maxp; q += p) primes[q] = false; } for (; p <= maxp; p++) if (primes[p]) pnums.push_back(p); } /* main */ int main() { vi pnums; gen_primes(MAX_P, pnums); //printf("%lu\n", pnums.size()); ll l, h; cin >> l >> h; ll ans = 0; for (int i = pnums.size() - 1; i >= 0; i--) { ll pi = pnums[i]; if (pi * pi > h) continue; ll minx = max(l, pi * pi), x; for (x = h; x >= minx; x--) { if (x % pi != 0) continue; ll y = x / pi; bool ok = true; for (int j = 0; ok && j < i; j++) ok = (y % pnums[j] != 0); if (ok) break; } if (x >= minx) { ans = x; break; } } printf("%lld\n", ans); return 0; }