Problem Description
Mr. Chopsticks is interested in random phenomena, and he conducts an experiment to study randomness. In the experiment, he throws n balls into m boxes in such a manner that each ball has equal probability of going to each boxes. After the experiment, he calculated the statistical variance V as
where Xi is the number of balls in the ith box, and X¯ is the average number of balls in a box.
Your task is to find out the expected value of V.
V=∑mi=1(Xi−X¯)2m
where Xi is the number of balls in the ith box, and X¯ is the average number of balls in a box.
Your task is to find out the expected value of V.
Input
The input contains multiple test cases. Each case contains two integers n and m (1 <= n, m <= 1000 000 000) in a line.
The input is terminated by n = m = 0.
The input is terminated by n = m = 0.
Output
For each case, output the result as A/B in a line, where A/B should be an irreducible fraction. Let B=1 if the result is an integer.
Sample Input
2 1 2 2 0 0
Sample Output
0/1 1/2HintIn the second sample, there are four possible outcomes, two outcomes with V = 0 and two outcomes with V = 1.
公式题,打表找了规律
#include<set> #include<map> #include<ctime> #include<cmath> #include<stack> #include<queue> #include<bitset> #include<cstdio> #include<string> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #define rep(i,j,k) for (int i = j; i <= k; i++) #define per(i,j,k) for (int i = j; i >= k; i--) #define lson x << 1, l, mid #define rson x << 1 | 1, mid + 1, r using namespace std; typedef long long LL; const int low(int x) { return x&-x; } const double eps = 1e-8; const int INF = 0x7FFFFFFF; const int mod = 1e9 + 7; const int N = 10; int T, n, m; LL gcd(LL x, LL y) { return x%y ? gcd(y, x%y) : y; } void solve() { int f[N + 1][N + 1], c[N + 1][N + 1]; c[0][0] = 1; rep(i, 1, N) { c[i][0] = c[i][i] = 1; rep(j, 1, i - 1) c[i][j] = c[i - 1][j] + c[i - 1][j - 1]; } rep(i, 1, N) { printf("%d: ", i); int p = 1; rep(j, 0, N) { f[i][j] = 0; int g = 1; rep(k, 0, j) { f[i][j] += c[j][k] * (f[i - 1][k] + (j - k)*(j - k)*g); g *= i - 1; } //printf("%d ", f[i][j]); int q = i * f[i][j] - j * j * p; p *= i; printf("%d/%d ", q / gcd(q, p*i), p*i / gcd(q, p*i)); } printf("\n"); } } int main() { //scanf("%d", &T); while (scanf("%d%d", &n, &m), n&&m)//T--) { LL x = 1LL * n*(m - 1), y = 1LL * m*m; printf("%lld/%lld\n", x / gcd(x, y), y / gcd(x, y)); } return 0; }