Ton

Форк
0
89 строк · 1.6 Кб
1
(int, int) f(int a, int b, int c, int d, int e, int f) {
2
  ;; solve a 2x2 linear equation
3
  int D = a * d - b * c;
4
  int Dx = e * d - b * f;
5
  int Dy = a * f - e * c;
6
  return (Dx / D, Dy / D);
7
}
8

9
int calc_phi() {
10
  var n = 1;
11
  repeat (70) { n *= 10; }
12
  var p = var q = 1;
13
  do {
14
    (p, q) = (q, p + q);
15
  } until (q > n);
16
  return muldivr(p, n, q);
17
}
18

19
int calc_sqrt2() {
20
  var n = 1;
21
  repeat (70) { n *= 10; }
22
  var p = var q = 1;
23
  do {
24
    var t = p + q;
25
    (p, q) = (q, t + q);
26
  } until (q > n);
27
  return muldivr(p, n, q);
28
}
29

30
var calc_root(m) {
31
  int base = 1;
32
  repeat(70) { base *= 10; }
33
  var (a, b, c) = (1, 0, - m);
34
  var (p1, q1, p2, q2) = (1, 0, 0, 1);
35
  do {
36
    int k = -1;
37
    var (a1, b1, c1) = (0, 0, 0);
38
    do {
39
      k += 1;
40
      (a1, b1, c1) = (a, b, c);
41
      c += b;
42
      c += b += a;
43
    } until (c > 0);
44
    (a, b, c) = (- c1, - b1, - a1);
45
    (p1, q1) = (k * p1 + q1, p1);
46
    (p2, q2) = (k * p2 + q2, p2);
47
  } until (p1 > base);
48
  return (p1, q1, p2, q2);
49
}
50

51
{-
52
operator _/%_ infix 20;
53

54
(int, int) ((int x) /% (int y)) {
55
  return (x / y, x % y);
56
}
57

58
(int, int) _/%_ (int x, int y) {
59
  return (x / y, x % y);
60
}
61
-}
62

63
int ataninv(int base, int q) { ;; computes base*atan(1/q)
64
  base ~/= q;
65
  q *= - q;
66
  int sum = 0;
67
  int n = 1;
68
  do {
69
    sum += base ~/ n;
70
    base ~/= q;
71
    n += 2;
72
  } until base == 0;
73
  return sum;
74
}
75

76
int calc_pi() {
77
  int base = 64;
78
  repeat (70) { base *= 10; }
79
  return (ataninv(base << 2, 5) - ataninv(base, 239)) ~>> 4;
80
}
81

82
int main() {
83
  return calc_pi();
84
}
85

86
{-
87
    method_id | in | out
88
TESTCASE | 0  |    | 31415926535897932384626433832795028841971693993751058209749445923078164
89
-}
90

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.