#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
long long GCD(long long a, long long b) {
  if (b == 0) return a;
  return GCD(b, a % b);
}
long long LCM(long long a, long long b) { return (a / GCD(a, b)) * b; }
long long bigmod(int x, int y) {
  if (y == 1) return x % MOD;
  if (y == 0) return 1;
  long long ans = bigmod(x, y / 2);
  if (y & 1) return ((ans % MOD * ans % MOD) % MOD * x % MOD) % MOD;
  return (ans % MOD * ans % MOD) % MOD;
}
pair<long long, pair<long long, long long> > extendedEuclid(long long a,
                                                            long long b) {
  if (a == 0) return make_pair(b, make_pair(0, 1));
  pair<long long, pair<long long, long long> > p;
  p = extendedEuclid(b % a, a);
  return make_pair(
      p.first,
      make_pair(p.second.second - p.second.first * (b / a), p.second.first));
}
long long modInverse(long long a, long long m) {
  return (extendedEuclid(a, m).second.first + m) % m;
}
long long inverseMod(long long x, long long y, long long z) {
  return ((x % z) * modInverse(y, z)) % z;
}
long long fact(int n) {
  if (n == 0) return 1;
  return n * fact(n - 1);
}
int main() {
  ios::sync_with_stdio(0);
  long long l, r, x, y;
  cin >> l >> r >> x >> y;
  vector<int> t;
  for (int c = 1; c * c <= y; c++) {
    if (y % c == 0) {
      t.push_back(c);
      if (c * c != y) t.push_back(y / c);
    }
  }
  long long ans = 0;
  for (int c = 0; c < t.size(); c++) {
    for (int j = 0; j < t.size(); j++) {
      if (GCD(t[c], t[j]) == x && LCM(t[c], t[j]) == y && t[c] >= l &&
          t[c] <= r && t[j] >= l && t[j] <= r)
        ans++;
    }
  }
  cout << ans << endl;
}
