题意:求f(n)=n/1+n/2…n/n,其中n/i保留整数。
题解:数学
对于n/i到n/(i+1),结果都是i,累加即可。
注意判断sqrt(n)的边界问题。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<map>
#define ll long long
using namespace std;
int t, n;
ll ans;
int main() {
int cas = 1;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
int k = sqrt(n);
ans = 0;
for (int i = 1; i <= k; i++) {
ans += 1ll * i * (n / i - n / (i + 1));
ans += n / i;
}
if (k == n / k) {
ans -= k;
}
printf("Case %d: %lld\n", cas++, ans);
}
return 0;
}