#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;
}
一开始边界处理出了点问题,看题解才想到直接弄到最小就不用讨论了,但是算质因数一下没搞懂,感觉这里直接最大公因数即可

京公网安备 11010502036488号