#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
int _, cas;
using namespace std;
const int size = 710000, mod = 1000000, inf = 0x3f3f3f3f;
const long long llmod = 4294967296ll, llinf = 0x3f3f3f3f3f3f3f3fll;
const double pi = acos(-1.0), eps = 1e-8;
int month[2][13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
                    0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nex[2][8] = {-1, 0, 1, 0, -1, 1, 1, -1, 0, 1, 0, -1, 1, 1, -1, -1};
template <class T>
inline void inc(T& a, T b) {
  a = (a + b) % mod;
}
template <class T>
inline T modu(T a) {
  return (a % mod + mod) % mod;
}
template <class T>
inline T modu(T a, T mod) {
  return (a % mod + mod) % mod;
}
template <class T>
inline void crl(T* l, T* r, int step) {
  T tmp = *l;
  for (T* i = l; i < r; i += step) *i = *(i + step);
  *(r - 1) = tmp;
}
template <class T>
inline void crr(T* l, T* r, int step) {
  T tmp = *(r - 1);
  for (T* i = r - 1; i > l; i -= step) *i = *(i - step);
  *l = tmp;
}
bool inline dbeq(double a, double b) { return fabs(a - b) < eps; }
template <class T>
inline void cmin(T& a, T b) {
  a = min(a, b);
}
template <class T>
inline void cmax(T& a, T b) {
  a = max(a, b);
}
inline int fastMax(int x, int y) {
  return (((y - x) >> (32 - 1)) & (x ^ y)) ^ y;
}
inline int fastMin(int x, int y) {
  return (((y - x) >> (32 - 1)) & (x ^ y)) ^ x;
}
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int main() {
  int x, y, a, b, lcm;
  cin >> x >> y >> a >> b;
  lcm = x * y / gcd(x, y);
  int t = a / lcm * lcm;
  if (t < a) t += lcm;
  if (t > b)
    cout << 0 << endl;
  else
    cout << 1 + (b - t) / lcm;
  return 0;
}
