// TLE intgett(int a, int b){ int ans = 0; if (a == 0) return0; if (b == 0) return1; if (a == b) return2; if (a > b) { int x = a / b; // 最后会MOD3 没有必要加上 ans += (x / 2) * 3; if (x % 2 == 1) { // 自以为多考虑了一步,实际使得下一次跳转的步长减少了 // GCD证明一般考虑下界 即两次操作后,一定有 b -> b / 2 // 分类讨论较为繁琐,一般记住特定的形式 return ans + 2 + gett(a % b, b - a % b); } else { return ans + gett(a % b, b); } } if (a < b) { return1 + gett(b, b - a); } }
intgett(int a, int b){ int ans = 0; if (a == 0) return0; if (b == 0) return1; if (a == b) return2; if (a > b) { int x = a / b; ans += x / 2 * 3; if (x % 2 == 1) { return ans + 1 + gett(b, a % b); } else { return ans + gett(a % b, b); } } if (a < b) { return1 + gett(b, b - a); } }