結果
| 問題 |
No.371 ぼく悪いプライムじゃないよ
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:39:26 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 2,513 bytes |
| コンパイル時間 | 396 ms |
| コンパイル使用メモリ | 82,120 KB |
| 実行使用メモリ | 100,364 KB |
| 最終ジャッジ日時 | 2025-04-01 01:03:24 |
| 合計ジャッジ時間 | 25,941 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 25 TLE * 17 |
ソースコード
import sys
import math
def sieve(n):
sieve = [True] * (n+1)
sieve[0] = sieve[1] = False
for i in range(2, int(math.isqrt(n)) + 1):
if sieve[i]:
sieve[i*i::i] = [False]*len(sieve[i*i::i])
primes = []
for i, is_prime in enumerate(sieve):
if is_prime:
primes.append(i)
return primes
def is_prime(n):
if n < 2:
return False
for p in [2,3,5,7,11,13,17,19,23,29,31,37]:
if n % p == 0:
return n == p
d = n-1
s = 0
while d % 2 == 0:
d //= 2
s += 1
for a in [2,3,5,7,11,13,17,19,23,29,31,37]:
if a >= n:
continue
x = pow(a, d, n)
if x == 1 or x == n-1:
continue
for _ in range(s-1):
x = pow(x, 2, n)
if x == n-1:
break
else:
return False
return True
def main():
L, H = map(int, sys.stdin.readline().split())
max_h = int(math.isqrt(H)) + 1
primes = sieve(max_h)
primes_desc = sorted(primes, reverse=True)
candidates = []
max_p = -1
max_n = -1
for p in primes_desc:
k_max = H // p
if k_max < p:
continue
d_list = [prime for prime in primes if prime < p]
if p == 2:
n = p * k_max
if n >= L:
if p > max_p or (p == max_p and n > max_n):
max_p = p
max_n = n
continue
found = False
k_candidate = -1
start = min(k_max, H//p)
for k in range(start, p-1, -1):
valid = True
for d in d_list:
if d * d > k:
break
if k % d == 0:
valid = False
break
if not valid:
continue
if valid:
if k < p*p and not is_prime(k):
continue
k_candidate = k
found = True
break
if found:
n = p * k_candidate
if n < L:
continue
if p > max_p or (p == max_p and n > max_n):
max_p = p
max_n = n
if max_p != -1:
print(max_n)
return
start = max(2, L)
for n in range(H, start-1, -1):
if n < L:
break
if is_prime(n):
continue
print(n)
return
print(L)
if __name__ == '__main__':
main()
lam6er