結果

問題 No.1272 珍しい級数
ユーザー lam6er
提出日時 2025-03-20 21:10:49
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 114 ms / 2,000 ms
コード長 2,131 bytes
コンパイル時間 158 ms
コンパイル使用メモリ 82,588 KB
実行使用メモリ 82,376 KB
最終ジャッジ日時 2025-03-20 21:11:02
合計ジャッジ時間 7,565 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 50
権限があれば一括ダウンロードができます

ソースコード

diff #

import math
from decimal import Decimal, getcontext, ROUND_FLOOR

def main():
    k = int(input().strip())
    if k == 0:
        print(0.0)
        return
    
    # Set high precision for Decimal calculations
    getcontext().prec = 1000
    # High-precision π value as a string to ensure accurate calculations
    pi_str = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989'
    pi_decimal = Decimal(pi_str)
    two_pi = 2 * pi_decimal  # Calculate 2π with high precision
    
    sum_total = 0.0
    n = 1
    while True:
        kn = k * n
        kn_decimal = Decimal(kn)
        # Compute kn mod two_pi
        divided = kn_decimal / two_pi
        q = divided.to_integral_value(rounding=ROUND_FLOOR)
        remainder = kn_decimal - q * two_pi
        # Convert remainder to float for sin calculation
        r = float(remainder)
        term = math.sin(r) / (n ** n)
        sum_total += term
        # Check if the term is small enough to stop
        if abs(term) < 1e-20:
            break
        n += 1
        # Prevent infinite loop in case of unexpected issues
        if n > 1000:
            break
    print(sum_total)

if __name__ == "__main__":
    main()
0