CF837E Vasya's Function

· · 题解

一个重要结论:

知道这个结论以后我们每次找到最大的一个 $c\le b$ 满足 $\gcd(c,a)\gt 1$。枚举 $\gcd$,由于 $a$ 最多被除以 $\log a$ 次,所以复杂度是 $\log a\sqrt a$ 的。能过。 ```cpp #include <bits/stdc++.h> #define int long long using namespace std; int a, b; int f(int x, int y) { if (y == 0) return 0; if (x == y) return 1; int z = 0; for (int i = 1; i * i <= x; i++) { if (x % i == 0) { i > 1 ? z = max(z, y / i * i) : 0; x / i > 1 ? z = max(z, y / (x / i) * (x / i)) : 0; } } return y - z + f(x / __gcd(x, z), z / __gcd(x, z)); } signed main() { cin >> a >> b; cout << f(a, b); return 0; } ```