Description I was trying to solve problem '1234 - Harmonic Number', I wrote the following code long long H( int n ) { Yes, my error was that I was using the integer divisions only. However, you are given n, you have to find H(n) as in my code. Input Input starts with an integer T (≤ 1000), denoting the number of test cases. Each case starts with a line containing an integer n (1 ≤ n < 231). Output For each case, print the case number and H(n) calculated by the code. Sample Input 11 1 2 3 4 5 6 7 8 9 10 2147483647 Sample Output Case 1: 1 Case 2: 3 Case 3: 5 Case 4: 8 Case 5: 10 Case 6: 14 Case 7: 16 Case 8: 20 Case 9: 23 Case 10: 27 Case 11: 46475828386 Source
Problem Setter: Jane Alam Jan
| ![]() |
先找前sqrt( n ) 个---剩下的数i ,n / i 的值 一定属于前sqrt(n)个数---相同的n / i 在一起加
代码:
#include<cstdio>
#define __int64 long long
void solve(int ca)
{
__int64 n;scanf("%lld",&n);
__int64 k=0,s=0,ji=0,shu=n;
__int64 i;
for (i=1;i*i<=n;i++)
{
s+=n/i;
k++;
}
i--;
__int64 chu=i;
for (i;i>0;i--)
{
s+=i*(n/i-chu);
chu=n/i;
}
printf("Case %d: %lld\n",ca,s);
}
int main()
{
int t;scanf("%d",&t);
for (int i=1;i<=t;i++)
solve(i);
return 0;
}