Арсен Жуматай,304 ArbTangent 6429
Жангирхан Шаку, 404 ArbTangent 6418
f1from decimal import Decimal, getcontext, ROUND_HALF_UPf1from decimal import Decimal, getcontext, ROUND_HALF_UP
2import sys2import sys
33
n4def compute_pi(prec):n4def compute_pi(precision):
5    getcontext().prec = prec + 55    getcontext().prec = precision + 5
6    C = 426880 * Decimal(10005).sqrt()6    coeff = 426880 * Decimal(10005).sqrt()
7    M = Decimal(1)7    M = Decimal(1)
8    L = Decimal(13591409)8    L = Decimal(13591409)
9    X = Decimal(1)9    X = Decimal(1)
10    K = Decimal(6)10    K = Decimal(6)
n11    S = Ln11    total_sum = L
12    for k in range(1, prec):12    for k in range(1, precision):
13        M = M * (K ** 3 - 16 * K) / k ** 313        M = M * (K ** 3 - 16 * K) / k ** 3
14        L += 54514013414        L += 545140134
15        X *= -26253741264076800015        X *= -262537412640768000
16        term = M * L / X16        term = M * L / X
n17        S += termn17        total_sum += term
18        if term == 0:18        if term == 0:
19            break19            break
20        K += 1220        K += 12
n21    pi = C / Sn21    return coeff / total_sum
22    return pi
2322
n24def sin_series(x, terms):n23def series_sine(x, num_terms):
25    getcontext().prec += 224    getcontext().prec += 2
26    x_power = x25    x_power = x
27    factorial = Decimal(1)26    factorial = Decimal(1)
n28    sin_x = xn27    sine_result = x
29    sign = -128    sign = -1
n30    for i in range(3, terms * 2, 2):n29    for i in range(3, num_terms * 2, 2):
31        x_power *= x * x30        x_power *= x * x
32        factorial *= i * (i - 1)31        factorial *= i * (i - 1)
33        term = x_power / factorial32        term = x_power / factorial
n34        sin_x += sign * termn33        sine_result += sign * term
35        sign *= -134        sign *= -1
36        if term == 0:35        if term == 0:
37            break36            break
38    getcontext().prec -= 237    getcontext().prec -= 2
n39    return +sin_xn38    return +sine_result
4039
n41def cos_series(x, terms):n40def series_cosine(x, num_terms):
42    getcontext().prec += 241    getcontext().prec += 2
43    x_power = Decimal(1)42    x_power = Decimal(1)
44    factorial = Decimal(1)43    factorial = Decimal(1)
n45    cos_x = Decimal(1)n44    cosine_result = Decimal(1)
46    sign = -145    sign = -1
n47    for i in range(2, terms * 2, 2):n46    for i in range(2, num_terms * 2, 2):
48        x_power *= x * x47        x_power *= x * x
49        factorial *= i * (i - 1)48        factorial *= i * (i - 1)
50        term = x_power / factorial49        term = x_power / factorial
n51        cos_x += sign * termn50        cosine_result += sign * term
52        sign *= -151        sign *= -1
53        if term == 0:52        if term == 0:
54            break53            break
55    getcontext().prec -= 254    getcontext().prec -= 2
n56    return +cos_xn55    return +cosine_result
5756
n58def round_to_significant_digits(x, digits):n57def significant_digit_round(value, digits):
59    if x.is_zero():58    if value.is_zero():
60        return Decimal(0)59        return Decimal(0)
61    else:60    else:
n62        sign, digits_tuple, exponent = x.as_tuple()n61        sign, digits_tuple, exponent = value.as_tuple()
63        num_digits = len(digits_tuple)62        num_digits = len(digits_tuple)
64        adjusted_exponent = exponent + num_digits - digits63        adjusted_exponent = exponent + num_digits - digits
65        quantize_exp = Decimal('1e{}'.format(adjusted_exponent))64        quantize_exp = Decimal('1e{}'.format(adjusted_exponent))
n66        return x.quantize(quantize_exp, rounding=ROUND_HALF_UP)n65        return value.quantize(quantize_exp, rounding=ROUND_HALF_UP)
6766
n68def main():n67def perform_calculations():
69    A = Decimal(sys.stdin.readline().strip())68    angle_degrees = Decimal(sys.stdin.readline().strip())
70    E = int(sys.stdin.readline().strip())69    precision = int(sys.stdin.readline().strip())
71    if E < 4 or E > 1000:70    if precision < 4 or precision > 1000:
72        print('Precision must be between 4 and 1000')71        print('Precision must be between 4 and 1000')
73        return72        return
n74    getcontext().prec = E + 10n73    getcontext().prec = precision + 10
75    pi = compute_pi(getcontext().prec)74    pi_result = compute_pi(getcontext().prec)
76    angle_rad = A * pi / Decimal(200)75    angle_radians = angle_degrees * pi_result / Decimal(200)
77    terms = E + 576    terms_required = precision + 5
78    sin_x = sin_series(angle_rad, terms)77    sine_value = series_sine(angle_radians, terms_required)
79    cos_x = cos_series(angle_rad, terms)78    cosine_value = series_cosine(angle_radians, terms_required)
80    tan_x = sin_x / cos_x79    tangent_value = sine_value / cosine_value
81    tan_x = round_to_significant_digits(tan_x, E)80    tangent_value = significant_digit_round(tangent_value, precision)
82    tan_str = '{0}'.format(tan_x.normalize())81    tangent_string = '{0}'.format(tangent_value.normalize())
83    if '.' in tan_str:82    if '.' in tangent_string:
84        integer_part, fractional_part = tan_str.split('.')83        integer_part, fractional_part = tangent_string.split('.')
85        significant_digits = len(integer_part.lstrip('-') + fractional_p84        significant_digits = len(integer_part.lstrip('-') + fractional_p
>art)>art)
86    else:85    else:
n87        integer_part = tan_str.lstrip('-')n86        integer_part = tangent_string.lstrip('-')
88        significant_digits = len(integer_part)87        significant_digits = len(integer_part)
n89    if significant_digits < E:n88    if significant_digits < precision:
90        zeros_needed = E - significant_digits89        zeros_needed = precision - significant_digits
91        if '.' in tan_str:90        if '.' in tangent_string:
92            tan_str += '0' * zeros_needed91            tangent_string += '0' * zeros_needed
93        else:92        else:
n94            tan_str += '.' + '0' * zeros_neededn93            tangent_string += '.' + '0' * zeros_needed
95    print(tan_str)94    print(tangent_string)
96if __name__ == '__main__':95if __name__ == '__main__':
t97    main()t96    perform_calculations()
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op