标签:line AMM 数学 lin rand 个数 begin 随机数 app
数学老师看不懂系列
看题目这一片代码就很晕:
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\)。
然后就完事了。
标签:line AMM 数学 lin rand 个数 begin 随机数 app
原文地址:https://www.cnblogs.com/Garen-Wang/p/10348836.html