#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<math.h>
#include<queue>
#include<stack>
#include<stdio.h>
#include<map>
#include<set>
#include<memory.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef unsigned long long ll;
ll gcd(ll a, ll b){
if (!b)
return a;
return gcd(b, a%b);
}
ll lcm(ll a, ll b){
return b / gcd(a, b)*a;
}
#define FOR(I,N) for(int(i)=0;i<int(N);++i)
#define FORK(I,N,K) for(int(i)=0;i<int(N);i+=int(K))
ll a, b, c, d, X, Y;
long long x, y;
long long res;
long long Ret(long long bb, long long XX, long long YY){
if (YY < c)
return 0;
if (XX>d)
return 0;
if (XX < c)
XX = c;
if (YY>d)
YY = d;
if (bb >= XX)
XX = bb + 1;
if (YY >= XX)
return YY - XX + 1;
}
int main(){
cin >> a >> b >> c >> d;
if (a == 1){
cout << d - c + 1 << endl;
return 0;
}
else if (a == b){
cout << d / a - (c - 1) / a << endl;
return 0;
}
long long preva = a;
long long prevb = b;
res+=Ret(-1, a, b);
while (1){
x = preva;
y = prevb;
X = y - y%a;
if (X == x)
X = (X / a + 1)*a;
Y = (X / a)*b;
y = X / a*b;
//cout<<X<<" "<<Y<<endl;
if (y >= d || y < 0)
Y = d;
res += Ret(prevb, X, Y);
preva = X;
prevb = Y;
if (Y == d)
break;
}
cout << res << endl;
cin >> a;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZTxpb3N0cmVhbT4KI2luY2x1ZGU8c3RyaW5nPgojaW5jbHVkZTxtYXRoLmg+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWFwPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPG1lbW9yeS5oPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbGw7CmxsIGdjZChsbCBhLCBsbCBiKXsKCWlmICghYikKCQlyZXR1cm4gYTsKCXJldHVybiBnY2QoYiwgYSViKTsKfQpsbCBsY20obGwgYSwgbGwgYil7CglyZXR1cm4gYiAvIGdjZChhLCBiKSphOwp9CiNkZWZpbmUgRk9SKEksTikgZm9yKGludChpKT0wO2k8aW50KE4pOysraSkKI2RlZmluZSBGT1JLKEksTixLKSBmb3IoaW50KGkpPTA7aTxpbnQoTik7aSs9aW50KEspKQpsbCBhLCBiLCBjLCBkLCBYLCBZOwpsb25nIGxvbmcgeCwgeTsKbG9uZyBsb25nIHJlczsKbG9uZyBsb25nIFJldChsb25nIGxvbmcgYmIsIGxvbmcgbG9uZyBYWCwgbG9uZyBsb25nIFlZKXsKCWlmIChZWSA8IGMpCgkJcmV0dXJuIDA7CglpZiAoWFg+ZCkKCQlyZXR1cm4gMDsKCWlmIChYWCA8IGMpCgkJWFggPSBjOwoJaWYgKFlZPmQpCgkJWVkgPSBkOwoJaWYgKGJiID49IFhYKQoJCVhYID0gYmIgKyAxOwoJaWYgKFlZID49IFhYKQoJCXJldHVybiBZWSAtIFhYICsgMTsKfQppbnQgbWFpbigpewoJY2luID4+IGEgPj4gYiA+PiBjID4+IGQ7CglpZiAoYSA9PSAxKXsKCQljb3V0IDw8IGQgLSBjICsgMSA8PCBlbmRsOwoJCXJldHVybiAwOwoJfQoJZWxzZSBpZiAoYSA9PSBiKXsKCQljb3V0IDw8IGQgLyBhIC0gKGMgLSAxKSAvIGEgPDwgZW5kbDsKCQlyZXR1cm4gMDsKCX0KCWxvbmcgbG9uZyBwcmV2YSA9IGE7Cglsb25nIGxvbmcgcHJldmIgPSBiOwoJcmVzKz1SZXQoLTEsIGEsIGIpOwoJd2hpbGUgKDEpewoJCXggPSBwcmV2YTsKCQl5ID0gcHJldmI7CgkJWCA9IHkgLSB5JWE7CgkJaWYgKFggPT0geCkKCQkJWCA9IChYIC8gYSArIDEpKmE7CgkJWSA9IChYIC8gYSkqYjsKCQl5ID0gWCAvIGEqYjsKCQkvL2NvdXQ8PFg8PCIgIjw8WTw8ZW5kbDsKCQlpZiAoeSA+PSBkIHx8IHkgPCAwKQoJCQlZID0gZDsKCQlyZXMgKz0gUmV0KHByZXZiLCBYLCBZKTsKCQlwcmV2YSA9IFg7CgkJcHJldmIgPSBZOwoJCWlmIChZID09IGQpCgkJCWJyZWFrOwoJfQoJY291dCA8PCByZXMgPDwgZW5kbDsKCWNpbiA+PiBhOwp9