int a0, a1, b0, b1;
cin >> a0 >> a1 >> b0 >> b1;
int ans = 0;
for (int x = 1; x * x <= b1; ++x)
{
if (b1 % x)
continue;
int y = b1 / x;
if ( (x % a1 == 0) && gcd(x / a1, a0 / a1) == 1 && gcd(b1 / b0, b1 / x) == 1)
++ans;
if (y == x)
continue;
if ((y % a1 == 0) && gcd(y / a1, a0 / a1) == 1 && gcd(b1 / b0, b1 / y) == 1)
++ans;
}
LINUX mei2 zhong1wen2 shu1ru4fa3
x = a1; x * x <= b1; x += a1 isn't ok. y = b1 / x may be not searched(if available).