#include <iostream> #include <algorithm> // for __gcd and max/min using namespace std; int main() { int x, y, l, r; cin >> x >> y >> l >> r; // 计算 x 和 y 的最大公约数(GCD) int gcd = __gcd(x, y); // 将 x 和 y 都除以 GCD,消除共同因子 x /= gcd; y /= gcd; // 计算区间 [l, r] 内同时被 max(x, y) 和 min(x, y) 整除的数的个数 int h_throld = max(x, y), b_throld = min(x, y); int left = (l - 1) / b_throld, right = r / h_throld; int ans = max(0, right - left); cout << ans << endl; }
一开始边界处理出了点问题,看题解才想到直接弄到最小就不用讨论了,但是算质因数一下没搞懂,感觉这里直接最大公因数即可