调和级数
内存限制: 256 Mb时间限制: 1000 ms
题目描述
给定一个整数 nn,记 ⌊x⌋⌊x⌋ 表示不超过实数 xx 的最大整数,请求出
输入格式
- 单个整数:表示 n
输出格式
- 单个整数:表示答案
数据范围
- 30% 的数据,n≤1,000
- 60% 的数据,n≤1,000,000
- 100% 的数据,1≤n≤1,000,000,000
样例数据
输入:
5
输出:
10
说明:
5+2+1+1+1
解析:
如果循环计算,会超时,可以把多个相同结果的合并计算,剩下的单独计算,
详见代码:
#include<bits/stdc++.h>
using namespace std;
long long n;
long long ans = 0;
int main() {
cin >> n;
int m = 0;
for(int i = 1; i <= n; i++) {
int d = n / i - (n / (i + 1));//计算有几个等于i的
ans += i * d;//加进去
if (d == 1) {//如果只有一个
m = n / (i + 1);//还有几个没算
break;
}
}
for(int i = 1; i <= m; i++) {//循环计算剩下的1到m
ans += n / i;
}
cout << ans;
return 0;
}