随机数生成器
题目描述
HKE最近编写了一个函数 $\text{rand}(l,r)$,其中 $l,r$ 为正整数且 $l \le r$。这个函数会等概率返回区间 $[l,r]$ 中任意一个正整数。然后,他又编写了一个函数:
```cpp
int work(int x){
if(x==1) return 0;
else return work(rand(1,x))+1;
}
```
这段代码用pascal写起来就是:
```pascal
function work(x:integer):integer;
begin
if x=1 then exit(0);
else exit(work(rand(1,x))+1);
end;
```
现在给定一个正整数 $n$,请问 $\text{work}(n)$ 的返回值的期望值是多少?
期望的定义:假设 $\text{work}(n)$ 返回的所有可能的值为 $x_1,x_2,\dots ,x_k$,它们出现的概率分别为 $p_1,p_2,\dots,p_k$,则期望为:
$$\mathbb{E}=\sum_{i=1}^{k}x_i p_i$$
输入输出格式
输入格式
一个正整数 $n$
输出格式
一个实数,表示 $\text{work}(n)$ 的期望值。保留 $5$ 位小数。
输入输出样例
输入样例 #1
2
输出样例 #1
2.00000
输入样例 #2
3
输出样例 #2
2.50000
输入样例 #3
100000
输出样例 #3
13.09014
说明
【样例 $1$ 解释】
$\text{work}(2)$ 有 $1/2$ 的概率返回 $1$,有 $1/4$ 的概率返回 $2$,有 $1/8$ 的概率返回 $3$ ……
则期望为 $1/2+2/4+3/8+ \dots =2$
【数据范围】
对于 $30\%$ 的数据,$n \le 9$;
对于 $50\%$ 的数据,$n \le 1000$;
对于 $70\%$ 的数据,$n \le 1000000$;
对于 $100\%$ 的数据,$1\le n < 2^{31}$。