結果
問題 | No.371 ぼく悪いプライムじゃないよ |
ユーザー |
![]() |
提出日時 | 2025-03-26 15:51:33 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,183 bytes |
コンパイル時間 | 320 ms |
コンパイル使用メモリ | 82,144 KB |
実行使用メモリ | 76,476 KB |
最終ジャッジ日時 | 2025-03-26 15:52:35 |
合計ジャッジ時間 | 5,289 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 20 TLE * 1 -- * 21 |
ソースコード
import mathdef sieve(n):sieve = [True] * (n + 1)sieve[0] = sieve[1] = Falsefor i in range(2, int(math.isqrt(n)) + 1):if sieve[i]:sieve[i*i : n+1 : i] = [False] * len(sieve[i*i : n+1 : i])return [i for i, is_p in enumerate(sieve) if is_p]def is_prime(n):if n < 2:return Falsefor p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:if n % p == 0:return n == pd = n - 1s = 0while d % 2 == 0:d //= 2s += 1for a in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]:if a >= n:continuex = pow(a, d, n)if x == 1 or x == n - 1:continuefor _ in range(s - 1):x = pow(x, 2, n)if x == n - 1:breakelse:return Falsereturn TrueL, H = map(int, input().split())sqrt_H = math.isqrt(H)primes = sieve(sqrt_H)primes.sort(reverse=True)p_max = -1x_max = -1for p in primes:# Case a: p squaredx_a = p * pvalid_a = L <= x_a <= H# Case b: p * k where k is >= p and not divisible by any prime < pk_max = H // pvalid_b = Falsex_b = -1if k_max >= p:primes_less_than_p = [q for q in primes if q < p]found_k = Nonefor k in range(k_max, p - 1, -1):divisible = Falsefor q in primes_less_than_p:if k % q == 0:divisible = Truebreakif not divisible:found_k = kbreakif found_k is not None:x_b_candidate = p * found_kif x_b_candidate >= L:x_b = x_b_candidatevalid_b = True# Determine current candidate xcandidates = []if valid_a:candidates.append(x_a)if valid_b:candidates.append(x_b)if not candidates:continuecurrent_x = max(candidates)# Update p_max and x_maxif p > p_max:p_max = px_max = current_xelif p == p_max:if current_x > x_max:x_max = current_xprint(x_max)