import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class EasyMath {
public static void main
(String[] args
) { FastReader reader = new FastReader();
int test = reader.nextInt();
for (int i = 0; i < test; i++) {
long n = reader.nextLong();
long m = reader.nextLong();
long a = reader.nextLong();
long d = reader.nextLong();
solve(n, m, a, d);
}
}
private static void solve(long n, long m, long a, long d) {
long[] values = new long[5];
for (int i = 0; i < 5; i++) {
values[i] = a + i*d;
}
long left, right, sum = 0, diff = m-n+1;
for (int i = 0; i < (2 << 5); i++) {
int count = 0;
long divisor = 1;
for (int j = 0; j < 5; j++) {
if ((i & (1 << j)) > 0) {
count++;
divisor = lcm(divisor, values[j]);
}
}
left = (n-1)/divisor;
right = m/divisor;
if (count % 2 == 0) sum -= right-left;
else sum += right - left;
}
}
private static long lcm(long a, long b) {
return (a*b)/gcd(a,b);
}
private static long gcd(long a, long b) {
if (b == 0) {
return a;
}
return gcd(b, a%b);
}
static class FastReader {
public FastReader() {
}
while (st == null || !st.hasMoreElements()) {
try {
}
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
}
long nextLong() {
return Long.
parseLong(next
()); }
double nextDouble() {
return Double.
parseDouble(next
()); }
try {
str = br.readLine();
}
e.printStackTrace();
}
return str;
}
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CgpwdWJsaWMgY2xhc3MgRWFzeU1hdGggewoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBGYXN0UmVhZGVyIHJlYWRlciA9IG5ldyBGYXN0UmVhZGVyKCk7CgogICAgICAgIGludCB0ZXN0ID0gcmVhZGVyLm5leHRJbnQoKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0OyBpKyspIHsKICAgICAgICAgICAgbG9uZyBuID0gcmVhZGVyLm5leHRMb25nKCk7CiAgICAgICAgICAgIGxvbmcgbSA9IHJlYWRlci5uZXh0TG9uZygpOwogICAgICAgICAgICBsb25nIGEgPSByZWFkZXIubmV4dExvbmcoKTsKICAgICAgICAgICAgbG9uZyBkID0gcmVhZGVyLm5leHRMb25nKCk7CgogICAgICAgICAgICBzb2x2ZShuLCBtLCBhLCBkKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzb2x2ZShsb25nIG4sIGxvbmcgbSwgbG9uZyBhLCBsb25nIGQpIHsKICAgICAgICBsb25nW10gdmFsdWVzID0gbmV3IGxvbmdbNV07CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICAgICAgIHZhbHVlc1tpXSA9IGEgKyBpKmQ7CiAgICAgICAgfQoKICAgICAgICBsb25nIGxlZnQsIHJpZ2h0LCBzdW0gPSAwLCBkaWZmID0gbS1uKzE7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKDIgPDwgNSk7IGkrKykgewogICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICBsb25nIGRpdmlzb3IgPSAxOwogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDU7IGorKykgewogICAgICAgICAgICAgICAgaWYgKChpICYgKDEgPDwgaikpID4gMCkgewogICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgZGl2aXNvciA9IGxjbShkaXZpc29yLCB2YWx1ZXNbal0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlZnQgPSAobi0xKS9kaXZpc29yOwogICAgICAgICAgICByaWdodCA9IG0vZGl2aXNvcjsKICAgICAgICAgICAgaWYgKGNvdW50ICUgMiA9PSAwKSBzdW0gLT0gcmlnaHQtbGVmdDsKICAgICAgICAgICAgZWxzZSBzdW0gKz0gcmlnaHQgLSBsZWZ0OwogICAgICAgIH0KICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGlmZi1zdW0pOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGxvbmcgbGNtKGxvbmcgYSwgbG9uZyBiKSB7CiAgICAgICAgcmV0dXJuIChhKmIpL2djZChhLGIpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGxvbmcgZ2NkKGxvbmcgYSwgbG9uZyBiKSB7CiAgICAgICAgaWYgKGIgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdjZChiLCBhJWIpOwogICAgfQoKICAgIHN0YXRpYyBjbGFzcyBGYXN0UmVhZGVyIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBicjsKICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3Q7CgogICAgICAgIHB1YmxpYyBGYXN0UmVhZGVyKCkgewogICAgICAgICAgICBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcKICAgICAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbVJlYWRlcihTeXN0ZW0uaW4pKTsKICAgICAgICB9CgogICAgICAgIFN0cmluZyBuZXh0KCkgewogICAgICAgICAgICB3aGlsZSAoc3QgPT0gbnVsbCB8fCAhc3QuaGFzTW9yZUVsZW1lbnRzKCkpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGJyLnJlYWRMaW5lKCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdC5uZXh0VG9rZW4oKTsKICAgICAgICB9CgogICAgICAgIGludCBuZXh0SW50KCkgewogICAgICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChuZXh0KCkpOwogICAgICAgIH0KCiAgICAgICAgbG9uZyBuZXh0TG9uZygpIHsKICAgICAgICAgICAgcmV0dXJuIExvbmcucGFyc2VMb25nKG5leHQoKSk7CiAgICAgICAgfQoKICAgICAgICBkb3VibGUgbmV4dERvdWJsZSgpIHsKICAgICAgICAgICAgcmV0dXJuIERvdWJsZS5wYXJzZURvdWJsZShuZXh0KCkpOwogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIG5leHRMaW5lKCkgewogICAgICAgICAgICBTdHJpbmcgc3RyID0gIiI7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBzdHIgPSBici5yZWFkTGluZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgfQogICAgfQp9Cg==