結果

問題 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
権限があれば一括ダウンロードができます

ソースコード

diff #

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()
0