What is the value this simple C++ function will return?
long long H(int n){
long long res = 0;
for( int i = 1; i <= n; i=i+1 ){
res = (res + n/i);
}
return res;
}
Input
The first line of input is an integer T (T ≤ 1000) that indicates the number of test cases. Each of the next T line will contain a single signed 32 bit integer n.
Output
For each test case, output will be a single line containing H(n).
Sample Input
2
5
10
Sample Output
10
27
问题链接:UVA11526 H(n)
问题简述:(略)
问题分析:
这是一个数学计算问题。
程序说明:
程序中给出了2个函数都是AC的。后一个函数需要一定的数学推导才能得到那样的计算方法,其算法复杂度要小许多。
题记:(略)
参考链接:(略)
AC的C++语言程序如下:
/* UVA11526 H(n) */
#include <bits/stdc++.h>
//#define FUN1
using namespace std;
#ifdef FUN1
long long h(int n)
{
long long res = 0;
for(int i=1; i<=n; i++) {
long long t = n / i;
if(t) {
long long k = n / t;
res += (k - i + 1) * t;
i = k;
} else
break;
}
return res;
}
#else
long long h(int n)
{
long long res = 0, m;
m = sqrt(n);
for (int i=1; i<= m; i++)
res += n / i;
return (res << 1) - m * m;
}
#endif
int main()
{
int t, n;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
printf("%lld\n", h(n));
}
return 0;
}