/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static long solve1(long n, long m, long a, long d) {
long[] ar = new long[5];
ar[0] = a;
ar[1] = a + d;
ar[2] = a + 2 * d;
ar[3] = a + 3 * d;
ar[4] = a + 4 * d;
long count = 0;
for (byte i = 0 ; i < 2 ; i++) {
for (byte j = 0; j < 2; j++) {
for (byte k = 0; k < 2; k++) {
for (byte l = 0; l < 2; l++) {
for (byte o = 0; o < 2; o++) {
long divisible = 1;
int eleCount = 0;
if (i == 1) {
divisible *= ar[0];
eleCount++;
}
if (j == 1) {
divisible = lcm(divisible, ar[1]);
eleCount++;
}
if (k == 1) {
divisible = lcm(divisible, ar[2]);
eleCount++;
}
if (l == 1) {
divisible = lcm(divisible, ar[3]);
eleCount++;
}
if (o == 1) {
divisible = lcm(divisible, ar[4]);
eleCount++;
}
if (eleCount == 0) {
continue;
}
int sign = eleCount % 2 == 0 ? -1 : 1;
count += sign * getDivCount(n, m, divisible);
}
}
}
}
}
return m - n + 1 - count;
}
private static long getDivCount(long n, long m, long x) {
return (m / x) + 1 - ((n + x - 1) / x);
}
static long gcd(long a, long b){
if (a == 0) return b;
return gcd(b %a, a);
}
static long lcm(long a, long b){
if (a < b)
return (a*b) / gcd(a, b);
return (a*b) / gcd(b, a);
}
{
Scanner sc
= new Scanner
(System.
in); int t = sc.nextInt();
for(int i=0;i<t;++i)
{
long n,m,a,d;
n = sc.nextLong();
m = sc.nextLong();
a = sc.nextLong();
d = sc.nextLong();
System.
out.
println(solve1
(n,m,a,d
)); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoKCQlwcml2YXRlIHN0YXRpYyBsb25nIHNvbHZlMShsb25nIG4sIGxvbmcgbSwgbG9uZyBhLCBsb25nIGQpIHsKICAgICAgICBsb25nW10gYXIgPSBuZXcgbG9uZ1s1XTsKCiAgICAgICAgYXJbMF0gPSBhOwogICAgICAgIGFyWzFdID0gYSArIGQ7CiAgICAgICAgYXJbMl0gPSBhICsgMiAqIGQ7CiAgICAgICAgYXJbM10gPSBhICsgMyAqIGQ7CiAgICAgICAgYXJbNF0gPSBhICsgNCAqIGQ7CgogICAgICAgIGxvbmcgY291bnQgPSAwOwoKICAgICAgICBmb3IgKGJ5dGUgaSA9IDAgOyBpIDwgMiA7IGkrKykgewogICAgICAgICAgICBmb3IgKGJ5dGUgaiA9IDA7IGogPCAyOyBqKyspIHsKICAgICAgICAgICAgICAgIGZvciAoYnl0ZSBrID0gMDsgayA8IDI7IGsrKykgewogICAgICAgICAgICAgICAgICAgIGZvciAoYnl0ZSBsID0gMDsgbCA8IDI7IGwrKykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGJ5dGUgbyA9IDA7IG8gPCAyOyBvKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZGl2aXNpYmxlID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbGVDb3VudCA9IDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzaWJsZSAqPSBhclswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpc2libGUgPSBsY20oZGl2aXNpYmxlLCBhclsxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlQ291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpc2libGUgPSBsY20oZGl2aXNpYmxlLCBhclsyXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlQ291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aXNpYmxlID0gbGNtKGRpdmlzaWJsZSwgYXJbM10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZUNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzaWJsZSA9IGxjbShkaXZpc2libGUsIGFyWzRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVDb3VudCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpZ24gPSBlbGVDb3VudCAlIDIgPT0gMCA/IC0xIDogMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IHNpZ24gKiBnZXREaXZDb3VudChuLCBtLCBkaXZpc2libGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbSAtIG4gKyAxIC0gY291bnQ7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBnZXREaXZDb3VudChsb25nIG4sIGxvbmcgbSwgbG9uZyB4KSB7CiAgICAgICAgICAgIHJldHVybiAobSAvIHgpICsgMSAtICgobiArIHggLSAxKSAvIHgpOwogICAgICAgIH0KCiAgICBzdGF0aWMgbG9uZyBnY2QobG9uZyBhLCBsb25nIGIpewogICAgICAgICAgICBpZiAoYSA9PSAwKSByZXR1cm4gYjsKCiAgICAgICAgICAgIHJldHVybiBnY2QoYiAgJWEsIGEpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGxvbmcgbGNtKGxvbmcgYSwgbG9uZyBiKXsKICAgICAgICAgICAgaWYgKGEgPCBiKQogICAgICAgICAgICAgICAgcmV0dXJuIChhKmIpIC8gZ2NkKGEsIGIpOwoKICAgICAgICAgICAgcmV0dXJuIChhKmIpIC8gZ2NkKGIsIGEpOwogICAgICAgIH0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU2Nhbm5lciBzYyA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgkJaW50IHQgPSBzYy5uZXh0SW50KCk7CgkJZm9yKGludCBpPTA7aTx0OysraSkKCQl7CgkJCWxvbmcgbixtLGEsZDsKCQkJbiA9IHNjLm5leHRMb25nKCk7CgkJCW0gPSBzYy5uZXh0TG9uZygpOwoJCQlhID0gc2MubmV4dExvbmcoKTsKCQkJZCA9IHNjLm5leHRMb25nKCk7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihzb2x2ZTEobixtLGEsZCkpOwoJCX0KCX0KCgkKfQo=