結果
問題 | No.313 π |
ユーザー |
|
提出日時 | 2024-06-11 22:45:58 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 685 ms / 5,000 ms |
コード長 | 2,067 bytes |
コンパイル時間 | 231 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 13,976 KB |
最終ジャッジ日時 | 2024-06-11 22:46:25 |
合計ジャッジ時間 | 25,361 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 |
ソースコード
# https://qiita.com/ykoba1994/items/44dd55c53663cec08398from decimal import Decimal, getcontext, MAX_EMAX, MIN_EMINimport math, timefrom sys import argvgetcontext().Emax = MAX_EMAX # 指数部の指定getcontext().Emin = MIN_EMIN # 指数部の指定# cdecimalが含まれるか確認def confirm_cdecimal():a = Truetry:import _decimalexcept ModuleNotFoundError:a = Falsereturn a# 平方根関数def my_sqrt(x):x2 = Decimal(x)if getcontext().prec <= 128:return x2.sqrt()else:prec_orig = getcontext().prect = (prec_orig * 53) // 100prec_list = []while t > 128:prec_list.append(t)t = t // 2prec_list.reverse()getcontext().prec = 128a = 1 / x2.sqrt()for i in prec_list:getcontext().prec = i + 10a = a + (a * (Decimal(1) - x2 * (a * a)) / Decimal(2))getcontext().prec = prec_origa = a + (a * (Decimal(1) - x2 * (a * a)) / Decimal(2))return x2 * a# Binary Splittingdef computePQT(a, b):if b == a + 1:p_int = (1 - 2*b) * (6*b - 5) * (6*b - 1)q_int = (b**3) * 10939058860032000t_int = p_int * (13591409 + 545140134*b)return [Decimal(p_int), Decimal(q_int), Decimal(t_int)]else:m = (a + b) // 2[pam, qam, tam] = computePQT(a, m)[pmb, qmb, tmb] = computePQT(m, b)p = pam * pmbq = qam * qmbt = tam * qmb + pam * tmbreturn [p, q, t]# 円周率計算def chudnovsky_pi(n):getcontext().prec = nterms = math.ceil(n / 14.181647462) + 10[_, q, t] = computePQT(0, terms)num = q * Decimal(426880) * my_sqrt(10005)den = t + q * Decimal(13591409)return num / dendef main():prec = 2 * 10 ** 5 + 10pi = chudnovsky_pi(prec)pi = str(pi)s = input()for i in range(len(s)):if pi[i] != s[i]:print(f"{s[i]} {pi[i]}")breakif __name__ == "__main__":main()