結果
| 問題 |
No.371 ぼく悪いプライムじゃないよ
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2019-06-17 18:40:38 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,072 bytes |
| コンパイル時間 | 353 ms |
| コンパイル使用メモリ | 32,512 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-28 01:39:32 |
| 合計ジャッジ時間 | 1,612 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 36 WA * 6 |
ソースコード
// yukicoder: 371 ぼく悪いプライムじゃないよ
// 2019.6.17 bal4u
#include <stdio.h>
#include <math.h>
typedef long long ll;
#define MAX 130000
#define SQRT 360
char notPrime[MAX+10] = {1,1,0,0,1}; // zero: if prime
void sieve()
{
int i, j;
for (i = 3; i <= SQRT; i += 2) if (!notPrime[i]) {
for (j = i * i; j <= MAX; j += i) notPrime[j] = 1;
}
}
ll L, H;
int check(int i) {
int j = (int)(H / i);
if (!(j & 1)) j--;
while (j > i && notPrime[j]) j -= 2;
if ((ll)i*j >= L) return j;
return 0;
}
int main()
{
int i, j, f;
ll a, ans;
scanf("%lld%lld", &L, &H);
ans = H - (H & 1);
if (H <= 8) { printf("%lld\n", ans); return 0; }
if ((a = H / 3 * 3) == L && (L & 1)) { printf("%lld\n", a); return 0; }
if (a > L && (a & 1)) ans = a;
sieve();
i = (int)sqrt((double)H);
if (!(i & 1)) i--;
f = 0;
while (i > 2) {
while (notPrime[i]) i -= 2;
if ((a = i*(H / i)) >= L && (a & 1)) ans = a, f = 1;
if (H / i > MAX) break;
if ((j = check(i)) > 0) ans = (ll)i*j, f = 1;
if (f) break;
i -= 2;
}
printf("%lld\n", ans);
return 0;
}
bal4u