#pragma GCC optimize ("O3") #include #include #include #include #include #include #include #include #include #include #include #include #include #define FORCE_INLINE __attribute__((always_inline)) inline constexpr bool DEBUG = false; std::ifstream inF("simple.in"); std::ofstream outF("simple.out"); typedef unsigned int uint; uint a, b; void input() { inF >> a >> b; } long double vals[30]; long double& val(char a) { return vals[a - 'A']; } long double maxVal = 0; void doOp(char a, char b, char op, char c) { switch (op) { case '+': val(a) = val(b) + val(c); break; case '-': val(a) = val(b) - val(c); break; case '*': val(a) = val(b) * val(c); break; case '/': val(a) = val(b) / val(c); break; } maxVal = std::max(maxVal, std::abs(val(a))); outF << a << " = " << b << " " << op << " " << c << "\n"; } void repOp(char target, char source, char op, uint iter) { char help = 'Z'; char inv = op == '+' ? '-' : '/'; doOp(target, source, inv, source); if (iter & 1) doOp(target, target, op, source); for (uint curr = 2; curr <= iter; curr = curr << 1) { if (curr == 2) doOp(help, source, op, source); else doOp(help, help, op, help); if (iter & curr) doOp(target, target, op, help); } } void copy(char target, char source) { doOp(target, source, '-', source); doOp(target, target, '+', source); } void solve() { char v = 'X'; val(v) = 255; uint base = a / b; a = a - base * b; std::cerr << "base = " << base << "\n"; std::cerr << "a = " << a << "\n"; std::cerr << "\n"; char rem = 'L'; repOp(rem, v, '*', base); std::cerr << "v^base = " << val(rem) << "\n"; char va = 'A'; repOp(va, v, '*', a); std::cerr << "v^a = " << val(va) << "\n"; char x = 'X'; doOp(x, v, '/', v); doOp(x, x, '+', x); for (int i = 0; i < 100; ++i) { std::cerr << "\n"; std::cerr << "x = " << val(x) << "\n"; char xb1 = 'Y'; repOp(xb1, x, '*', b - 1); std::cerr << "x^(b-1) = " << val(xb1) << "\n"; char num = 'N'; doOp(num, va, '/', xb1); doOp(num, x, '-', num); std::cerr << "x - v^a / x^(b-1) = " << val(num) << "\n"; char one = 'O'; char bVar = 'B'; doOp(one, x, '/', x); repOp(bVar, one, '+', b); std::cerr << "b = " << val(bVar) << "\n"; char update = 'U'; doOp(update, num, '/', bVar); std::cerr << "update = " << val(update) << "\n"; doOp(x, x, '-', update); } std::cerr << "\n"; std::cerr << "x = " << val(x) << "\n"; std::cerr << "\n"; doOp(x, x, '*', rem); std::cerr << "x = " << val(x) << "\n"; std::cerr << "\n"; std::cerr << "maxVal = " << maxVal << "\n"; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); input(); solve(); return 0; }