首页 > 学院 > 开发设计 > 正文

Harmonic Number (II) [数学]

2019-11-08 03:19:06
字体:
来源:转载
供稿:网友

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

题解

发现一下规律就可以写出o(n√) 的代码了

#include<stdio.h>typedef long long LL;int main(){ int T;LL n; scanf("%d",&T); for(int t=1;t<=T;t++){ scanf("%lld",&n); LL l=2,r=n,ans=0; while(l<=n/l){ ans+=(r-n/l)*(l-1); r=n/l; ans+=n/l; l++; } for(LL i=l;i<=r;i++) ans+=n/l; printf("Case %d: %lld/n",t,ans+n); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表