#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;
}

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