#include <bits/stdc++.h>

using namespace std;

/*
    n = a^k
    En küçük a > 0 için {a, k} döndürüyor.
*/
array<int, 2> get_mask(int n) {
    int init_n = n;
    vector<array<int, 2>> factorization;
    int g = 0;
    for (int i = 2; i * i <= n; i++) {
        if (n % i)
            continue;
        int exp = 0;
        while (n % i == 0)
            n /= i, exp++;
        factorization.push_back({i, exp});
        g = __gcd(g, exp);
    }

    if (n > 1) {
        return {init_n, 1};
    }

    int mask = 1;
    for (auto &[prime, exp] : factorization) {
        for (int i = 0; i < exp / g; i++)
            mask *= prime;
    }

    return {mask, g};
}

int main() {
    int a1, a2, b1, b2;
    cin >> a1 >> a2 >> b1 >> b2;
    set<int> existing_powers[a2 + 1];
    for (int a = a1; a <= a2; a++) {
        auto [mask, exp] = get_mask(a);
        for (int b = b1; b <= b2; b++)
            existing_powers[mask].insert(exp * b);
    }
    int ans = 0;
    for (auto &powers : existing_powers)
        ans += powers.size();
    cout << ans << "\n";
}