← Back to List

13705번: Ax+Bsin(x)=C ↗

Solutions

Python 3
1.9 KB | 1982 chars
from decimal import Decimal as D
from decimal import getcontext

# def pi():
#     getcontext().prec+=2
#     three = D('3')
#     lasts, t, s, n, na, d, da = D('0'), three, D('3'), D('1'), D('0'), D('0'), D('24')
#     while s != lasts:
#         lasts = s
#         n, na = n+na, na+D('8')
#         d, da = d+da, da+D('32')
#         t = (t * n) / d
#         s += t
#     getcontext().prec-= 2
#     return +s

def cos(x):
    getcontext().prec+=2
    i, lasts, s, fact, num, sign = D('0'), D('0'), D('1'), D('1'), D('1'), D('1')
    while s != lasts:
        lasts = s
        i += D('2')
        fact *= i * (i-D('1'))
        num *= x * x
        sign *= D('-1')
        s += num / fact * sign
    getcontext().prec-=2
    return +s

def sin(x):
    getcontext().prec+=2
    i, lasts, s, fact, num, sign = D('1'), D('0'), x, D('1'), x, D('1')
    while s != lasts:
        lasts = s
        i += D('2')
        fact *= i * (i-D('1'))
        num *= x * x
        sign *= D('-1')
        s += num / fact * sign
    getcontext().prec-=2
    return +s


if __name__ == "__main__":
    getcontext().prec=500
    p = D('3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762')
    a,b,c = map(D,input().split())
    ans = D('0')
    for i in range(500):
        z = D(str(ans % (D('2') * p)))
        f_prime_x = D(str(a+b*D(cos(z))))
        f_x = D(str(a*ans + b*D(sin(z)) -c))
        ans = D(str((f_prime_x * ans - f_x) / f_prime_x))
    print(round(ans,6))