結果
問題 |
No.1272 珍しい級数
|
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
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()