唯一分解, 筛出素数即可。
int p, q, r, s;
int e[maxn];
void add_int(int n, int d) {
for(int i = 0; i < 1229; i++) {
while(!(n % primes[i])) {
n /= primes[i];
e[i] += d;
}
if(n == 1) break;
}
}
void add_fac(int n, int d) {
for(int i = 1; i <= n; i++)
add_int(i, d);
}
int main() {
while(~scanf("%d%d%d%d", &p, &q, &r, &s)) {
memset(e, 0, sizeof(e));
add_fac(p, 1);
add_fac(q, -1);
add_fac(p - q, -1);
add_fac(r, -1);
add_fac(s, 1);
add_fac(r - s, 1);
double ans = 1;
for(int i = 0; i < 1229; i++)
ans *= pow(primes[i], e[i]);
printf("%.5f\n", ans);
}
return 0;
}