/* -*- coding: utf-8 -*- * * 1794.cc: No.1794 Continued Fraction - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_L = 62; /* typedef */ /* global variables */ int as[MAX_L]; /* subroutines */ template T gcd(T m, T n) { // m > 0, n > 0 if (m < n) swap(m, n); while (n > 0) { T r = m % n; m = n; n = r; } return m; } void reduce(int &n, int &m) { if (n > 0 && m > 0) { int g = gcd(n, m); n /= g, m /= g; } } /* main */ int main() { /* Let xi=ai+1/x{i+1}, xL=aL -> n/m = x0 = a0+1/x1 -> 1/x1 = n/m-a0 = (n-m*a0)/m -> x1 = m/(n-m*a0) */ int n, m; scanf("%d%d", &n, &m); reduce(n, m); int l = 0; while (n > 0 && m > 0) { int d = n / m; n -= m * d; as[l++] = d; reduce(n, m); swap(n, m); } while (l > 0 && as[l - 1] == 0) l--; for (int i = 0; i < l; i++) printf("%d%c", as[i], (i + 1 < l) ? ' ' : '\n'); return 0; }