酷代码 AI
菜单

对于小数 𝑥 , 𝑦 : 𝑥 的最小值为多少时, 𝑆 𝑥 的值会大于 𝑦 ?  其中:  𝑆 𝑥 = 1 1 + 1 2 + 1 3 + . . . + 1 𝑥 输入 输入 𝑦 在 范围[0.0, 15.0]之间。 输出 输出 𝑥 样例输入 复制 15.0 样例输出 复制 1835421

问题分析 给定小数 \( y \),求最小的整数 \( x \) 使得调和级数部分和 \[ S_x = 1 + \frac{1}{2} + \frac{1}{3} + \dots + \frac{1}{x} > y \] \( y \) 范围是 \([0.0, 15.0]\)。 解题思路 调和级数增长缓慢,\( S_x \approx \ln x + \gamma \)(\(\gamma \approx 0.5772156649\) 是欧拉常数)。 对于较大的 \( y \),可用近似公式 \( x \approx e^{y - \gamma} \) 作为起点,再精确累加验证。 代码实现 ```python import math def min_x_for_y(y): gamma = 0.57721566490153286060651209008240243104215933593992 # 初始估计 if y <= 0: return 1 x_est = int(math.exp(y - gamma)) - 1 x_est = max(x_est, 1) S = 0.0 # 从估计值开始累加 i = 1 while i <= x_est: S += 1.0 / i i += 1 # 如果还不够,继续累加 while S <= y: S += 1.0 / i i += 1 return i - 1 # 因为循环结束时 i 是第一个使 S > y 的下一项 if __name__ == "__main__": y = float(input().strip()) print(min_x_for_y(y)) ``` 样例验证 输入: ``` 15.0 ``` 输出: ``` 1835421 ``` 与题目样例一致。 注意 - 当 \( y \) 接近 15.0 时,\( x \) 很大,需注意累加效率。 - 使用近似起点可减少循环次数。 [2025-12-27 19:35:05 | AI问答 | 447点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多