結果
| 問題 |
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 |
ソースコード
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()
lam6er