結果
問題 |
No.454 逆2乗和
|
ユーザー |
![]() |
提出日時 | 2025-04-09 21:02:55 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 38 ms / 2,000 ms |
コード長 | 1,044 bytes |
コンパイル時間 | 149 ms |
コンパイル使用メモリ | 82,792 KB |
実行使用メモリ | 54,184 KB |
最終ジャッジ日時 | 2025-04-09 21:05:09 |
合計ジャッジ時間 | 2,538 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 |
ソースコード
import math def asymptotic_psi1(z): result = 1.0 / z + 1.0 / (2.0 * z ** 2) # 漸近展開の項をベルヌーイ数に基づいて追加 terms = [ (1, 6, 3), (-1, 30, 5), (1, 42, 7), (-1, 30, 9), (5, 66, 11), (-691, 2730, 13), (7, 6, 15), (-3617, 510, 17), (43867, 798, 19), (-174611, 330, 21), ] for numerator, denominator, exponent in terms: term = (numerator / denominator) / (z ** exponent) result += term # 項の絶対値が小さくなりすぎたら打ち切る if abs(term) < 1e-20: break return result x = float(input()) z = x + 1.0 A = 20.0 # 閾値 if z < A: K = math.ceil(A - z) sum_terms = 0.0 for k in range(K): current_z = z + k sum_terms += 1.0 / (current_z ** 2) new_z = z + K psizK = asymptotic_psi1(new_z) ans = psizK + sum_terms else: ans = asymptotic_psi1(z) # 小数点以下16桁まで表示 print("{0:.16f}".format(ans))