[Light oj] 1245 - Harmonic Number (II)

91 阅读1分钟
  • 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

    \

    \

    \

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    
    int main(){
    	int T, n;
    	scanf("%d", &T);
    	for(int ca = 1; ca <= T; ca++){
    		scanf("%d", &n);
    		int te = sqrt(n);
    		long long sum = 0; 
    		for(int i = 1; n/i > te; i++){
    			//sum += (n / i - n / (i +1)) * i;
    			sum += (n / i - n / (i + 1)) * i;
    			//cout<<sum<<endl; 
    		}
    		for(int i = 1; i <= te; i++){
    			sum += n / i;
    		}
    		printf("Case %d: %lld\n", ca, sum);
    	}	
    	return 0;
    }
    


    \

本文已参与「新人创作礼」活动,一起开启掘金创作之路