[Light oj] 1245 - Harmonic Number (II)

来源:互联网 发布:淘宝app收藏店铺 编辑:程序博客网 时间:2024/05/11 03:15
1245 - Harmonic Number (II)
PDF (English)StatisticsForum
Time Limit: 3 second(s)Memory Limit: 32 MB


点击打开题目链接

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 divisionsonly. However, you are givenn, you have to find H(n) as in mycode.

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) calculatedby the code.

Sample Input

Output for Sample Input

11

1

2

3

4

5

6

7

8

9

10

2147483647

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 <vector>#include <queue>#include <math.h>#include <set>#include <map>#include <stack>#include <stdlib.h>#include <string.h>#include <stdio.h>#define max(a,b) (a>b?a:b)#define min(a,b) (a<b?a:b)using namespace std;long long int H(int n){    int i,k=(int)sqrt(n+0.0);///削减到sqrt(n)考虑对称    long long ans=0;    for(i=1; i<=k; i++)    {        ans+=n/i;        if(n/i>n/(i+1))            ans+=(n/i-n/(i+1))*i;    }    if(k==n/k)        ans-=k;    return ans;}int main(){    int t,cnt=0,n;    scanf("%d",&t);    {        cnt=0;        while(t--)        {            scanf("%d",&n);            printf("Case %d: %lld\n",++cnt,H(n));        }    }    return 0;}


0 0
原创粉丝点击