2318. 子序列的和
1000ms
256MB
简单
循环
题目描述
给定两个正整数 $n$ 和 $m$,请计算以下序列的和:
$$S = \sum_{i=n}^{m} \frac{1}{i^2} = \frac{1}{n^2} + \frac{1}{(n+1)^2} + \dots + \frac{1}{m^2}$$
请输出计算结果,并保留小数点后 5 位。
输入格式
一行,包含两个正整数 $n$ 和 $m$ ($1 \le n \lt m \lt 10^6$)。
输出格式
一个浮点数,表示计算结果,保留五位小数。
样例 1
输入 (Input)
2 4
输出 (Output)
0.42361
样例 2
输入 (Input)
65536 655360
输出 (Output)
0.00001
- 对于所有数据:$1 \le n \lt m \lt 10^6$。
- **陷阱提示**:
当 $i$ 接近 $10^6$ 时,$i^2$ 会达到 $10^{12}$。
- 在 C++ 中,`int` 的最大值约为 $2 \times 10^9$,直接计算 `i * i` 会发生**整型溢出**。
- 即使使用 `long long`(最大约 $9 \times 10^{18}$)可以存下 $i^2$,但在进行 `1.0 / (i * i)` 运算时,仍需注意浮点数的精度问题。
- **算法建议**:
为了保险起见,建议直接将 $i$ 转换为 `double` 后再进行平方运算,即使用 `1.0 / ((double)i * i)`。
› 输入 stdin
CtrlShiftEnter
‹ 输出 stdout
错误 stderr
操作成功