結果
| 問題 |
No.781 円周上の格子点の数え上げ
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 23:09:59 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,584 bytes |
| コンパイル時間 | 450 ms |
| コンパイル使用メモリ | 81,864 KB |
| 実行使用メモリ | 176,340 KB |
| 最終ジャッジ日時 | 2025-04-15 23:12:24 |
| 合計ジャッジ時間 | 9,285 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 20 TLE * 1 |
ソースコード
import sys
def sieve(n):
min_prime = [0] * (n + 1)
for i in range(2, n + 1):
if min_prime[i] == 0:
min_prime[i] = i
for j in range(i * 2, n + 1, i):
if min_prime[j] == 0:
min_prime[j] = i
return min_prime
def main():
X, Y = map(int, sys.stdin.readline().split())
if X == 0:
X = 1 # Since R >=1 per problem constraints
min_prime = sieve(Y)
max_f = 0
# Check consecutive primes product
primes_4k1 = []
for p in range(2, Y + 1):
if min_prime[p] == p and p % 4 == 1:
primes_4k1.append(p)
product = 1
max_k = 0
for p in primes_4k1:
if product > Y // p:
break
product *= p
max_k += 1
if product >= X and product <= Y:
candidate = 4 * (2 ** max_k)
if candidate > max_f:
max_f = candidate
# Iterate through all R in [X, Y]
for R in range(X, Y + 1):
current = R
valid = True
product = 1
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 = product * 4
if current_f > max_f:
max_f = current_f
print(max_f)
if __name__ == '__main__':
main()
lam6er