結果
| 問題 |
No.781 円周上の格子点の数え上げ
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:29:35 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,727 bytes |
| コンパイル時間 | 183 ms |
| コンパイル使用メモリ | 82,600 KB |
| 実行使用メモリ | 353,152 KB |
| 最終ジャッジ日時 | 2025-03-20 20:30:38 |
| 合計ジャッジ時間 | 9,541 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 TLE * 2 -- * 7 |
ソースコード
import sys
def euler_sieve(n_max):
if n_max < 2:
return []
min_prime = [0] * (n_max + 1)
primes = []
is_prime = [True] * (n_max + 1)
is_prime[0], is_prime[1] = False, False
for i in range(2, n_max + 1):
if is_prime[i]:
min_prime[i] = i
primes.append(i)
j = 0
while j < len(primes) and i * primes[j] <= n_max:
p = primes[j]
m = i * p
is_prime[m] = False
if min_prime[m] == 0:
min_prime[m] = p
if i % p == 0:
break
j += 1
return min_prime
def compute_max_f(X, Y, min_prime):
max_f = 0
for R in range(X, Y + 1):
if R == 0:
continue
current = R
valid = True
product = 1
factors = {}
# Factorize R using min_prime array
while current != 1:
p = min_prime[current]
count = 0
while current % p == 0:
count += 1
current = current // p
if p % 4 == 3:
if count % 2 != 0:
valid = False
break
elif p % 4 == 1:
product *= (count + 1)
if valid:
current_f = 4 * product
if current_f > max_f:
max_f = current_f
return max_f
def main():
X, Y = map(int, sys.stdin.readline().split())
if X == 0:
X = 1
if Y < X:
print(0)
return
max_r = Y
if max_r == 0:
print(0)
return
min_prime = euler_sieve(max_r)
result = compute_max_f(X, Y, min_prime)
print(result)
if __name__ == "__main__":
main()
lam6er