P5147 随机数生成器 [数列]

P5147 随机数生成器

数学老师看不懂系列

看题目这一片代码就很晕:

int work(int x)
{
    if(x==1)return 0;
    else return work(rand(1,x))+1;
}

但是如果你把这个东西看成一个数列的值,就很显然了。

work(n)返回的期望值为\(a_n\),那么题意就可以变成:

\[\begin{cases} a_1 = 0 \\ a_n= \frac{S_n}{n} + 1\end{cases}\]

运用数列的知识,我们就能发现从\(a_2\)开始的数列就是一个调和级数。

所以我们特判\(n=1\)的情况,然后其他的就使用调和级数公式。

\(n \leq 1000000\)的情况直接暴力算,\(n\)巨大的时候就输出\(\ln{n} + \gamma + 1\),其中\(\gamma \approx 0.5772156649015328606065120900824024310421\)

然后就完事了。

转载于:https://www.cnblogs.com/Garen-Wang/p/10348836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值