結果

問題 No.313 π
コンテスト
ユーザー i_taku
提出日時 2026-03-03 11:09:18
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 4,167 ms / 5,000 ms
コード長 1,081 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 166 ms
コンパイル使用メモリ 85,348 KB
実行使用メモリ 226,584 KB
最終ジャッジ日時 2026-03-03 11:11:57
合計ジャッジ時間 116,464 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys
from decimal import Decimal, getcontext
sys.set_int_max_str_digits(0)

def pi_chudnovsky(digits):
    getcontext().prec = digits + 10
    num_iterations = digits // 14 + 1

    def binary_splitting(a, b):
        if b - a == 1:
            if a == 0:
                P = Q = 1
            else:
                P = (6 * a - 5) * (2 * a - 1) * (6 * a - 1)
                Q = a**3 * 640320**3 // 24
            T = P * (13591409 + 545140134 * a)
            if a % 2 == 1:
                T = -T
            return P, Q, T
        else:
            mid = (a + b) // 2
            P1, Q1, T1 = binary_splitting(a, mid)
            P2, Q2, T2 = binary_splitting(mid, b)
            P = P1 * P2
            Q = Q1 * Q2
            T = Q2 * T1 + P1 * T2
            return P, Q, T

    _, Q, T = binary_splitting(0, num_iterations)
    C = 426880 * Decimal(10005).sqrt()
    pi = (C * Q) / T
    
    return str(pi)[:digits + 2]

S = input()
pi_str = str(pi_chudnovsky(200_000))
for i in range(len(S)):
    if S[i] != pi_str[i]:
        print(S[i], pi_str[i])
        exit()
0