随机数生成器

题目描述

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}$。