#include <iostream> // For cout, cin, & endl
#include <cmath> // For sqrt, ceil, min, & max
int myGCD(int u, int v) {
int r;
while (v != 0) {
r = u % v;
u = v;
v = r;
}
return u;
}
int numPairs(int n1, int n2, int lcm, int hcf) {
int count = 0;
int myProd = lcm * hcf;
// If sqrt(myProd) > n2, then we need to stop at n2
int myLim = std::min((int) std::sqrt((double) myProd), n2);
// We ensure that we cover the entire range by taking the
// max. E.g. if n1 > myProd / n2, we would start at n1
double myStart = std::max(n1, myProd / n2);
myStart = std::ceil(myStart / (double) hcf) * hcf;
for (int i = (int) myStart; i <= myLim; i += hcf)
if (lcm % i == 0) // ensure our number is divisible by lcm
if (myGCD(i, myProd / i) == hcf) // ensure our pair gives correct gcd
++count;
return count;
}
int main() {
int n1, n2, lcm, hcf, cnt;
std::cin >> n1 >> n2 >> lcm >> hcf;
cnt = numPairs(n1, n2, lcm, hcf);
std::cout << cnt << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAvLyBGb3IgY291dCwgY2luLCAmIGVuZGwKI2luY2x1ZGUgPGNtYXRoPiAgICAvLyBGb3Igc3FydCwgY2VpbCwgbWluLCAmIG1heAoKaW50IG15R0NEKGludCB1LCBpbnQgdikgewogICAgaW50IHI7CiAgICB3aGlsZSAodiAhPSAwKSB7CiAgICAgICAgciA9IHUgJSB2OwogICAgICAgIHUgPSB2OwogICAgICAgIHYgPSByOwogICAgfQogICAgcmV0dXJuIHU7Cn0KCmludCBudW1QYWlycyhpbnQgbjEsIGludCBuMiwgaW50IGxjbSwgaW50IGhjZikgewoKICAgIGludCBjb3VudCA9IDA7CiAgICBpbnQgbXlQcm9kID0gbGNtICogaGNmOwoKICAgIC8vIElmIHNxcnQobXlQcm9kKSA+IG4yLCB0aGVuIHdlIG5lZWQgdG8gc3RvcCBhdCBuMgogICAgaW50IG15TGltID0gc3RkOjptaW4oKGludCkgc3RkOjpzcXJ0KChkb3VibGUpIG15UHJvZCksIG4yKTsKCiAgICAvLyBXZSBlbnN1cmUgdGhhdCB3ZSBjb3ZlciB0aGUgZW50aXJlIHJhbmdlIGJ5IHRha2luZyB0aGUKICAgIC8vIG1heC4gRS5nLiBpZiBuMSA+IG15UHJvZCAvIG4yLCB3ZSB3b3VsZCBzdGFydCBhdCBuMQogICAgZG91YmxlIG15U3RhcnQgPSBzdGQ6Om1heChuMSwgbXlQcm9kIC8gbjIpOwogICAgbXlTdGFydCA9IHN0ZDo6Y2VpbChteVN0YXJ0IC8gKGRvdWJsZSkgaGNmKSAqIGhjZjsKCiAgICBmb3IgKGludCBpID0gKGludCkgbXlTdGFydDsgaSA8PSBteUxpbTsgaSArPSBoY2YpCiAgICAgICAgaWYgKGxjbSAlIGkgPT0gMCkgIC8vIGVuc3VyZSBvdXIgbnVtYmVyIGlzIGRpdmlzaWJsZSBieSBsY20KICAgICAgICAgICAgaWYgKG15R0NEKGksIG15UHJvZCAvIGkpID09IGhjZikgIC8vIGVuc3VyZSBvdXIgcGFpciBnaXZlcyBjb3JyZWN0IGdjZAogICAgICAgICAgICAgICAgKytjb3VudDsKCiAgICByZXR1cm4gY291bnQ7Cn0KCmludCBtYWluKCkgewogICAgaW50IG4xLCBuMiwgbGNtLCBoY2YsIGNudDsKICAgIHN0ZDo6Y2luID4+IG4xID4+IG4yID4+IGxjbSA+PiBoY2Y7CiAgICBjbnQgPSBudW1QYWlycyhuMSwgbjIsIGxjbSwgaGNmKTsKICAgIHN0ZDo6Y291dCA8PCBjbnQgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=