题目:
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL gcd(LL x,LL y) {return y == 0 ? x : gcd(y,x % y);}
int main()
{
int n;
cin >> n;
LL p = 0,q = 1,g;
for(int i = 1;i <= n;i++){
p = p * i + q;
q = q * i;
g = gcd(p,q);
p /= g;
q /= g;
}
p *= n;
g = gcd(p,q);
p /= g;
q /= g;
cout << p;
if(q > 1LL) cout << "/" << q;
cout << endl;
return 0;
}
期望就是概率的倒数,将所有期望值累加得到:N + N / 2 + … + 1,将N提出来得到:N(1 + 1 / 2 + …+ 1 / N)。现在假如p / q是要求的数,初始值是p = 0,q = 1,现在每次加上1 / i;也就是(p * i + q )/ q *i,每次计算完得到新的p,q,然后再除以p,q的最大公约数进行化简。