LightOJ - 1245 Harmonic Number (II)

I was trying to solve problem '1234 - Harmonic Number', I wrote the following code


long long H( int n ) {
    long long res = 0;
    for( int i = 1; i <= n; i++ )
        res = res + n / i;
    return res;
}


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

题意:求H(n);

#include<map>
#include<stack>
#include<queue>
#include<math.h>
#include<vector>
#include<string>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define maxn 10000001
#define maxm 1000000000005
#define mod 1000000007
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int main(){
    int t,test=0;scanf("%d",&t);
    while(t--){
        ll x;scanf("%lld",&x);
        ll n=sqrt(x*1.0);
        ll ans=0;
        for(int i=1;i<=n;i++){ans+=x/i;}
        for(int i=1;i<=n;i++){
            ans+=(x/i-x/(i+1))*i;
        }
        if(n==x/n)ans-=n;
      printf("Case %d: %lld\n",++test,ans);
    }
}

posted @ 2018-05-12 09:18  _大美  阅读(131)  评论(0编辑  收藏  举报