标签:
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 divisions only. However, you are given n, you have to find H(n) as in my code.
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).
For each case, print the case number and H(n) calculated by 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 |
题解,自己有思路,却写不出来,看了答案,倒是挺简单的;
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define mem(x,y) memset(x,y,sizeof(x)) 7 using namespace std; 8 typedef long long LL; 9 const int INF=0x3f3f3f3f; 10 11 int main(){ 12 int T; 13 int n,cnt=0; 14 LL res; 15 scanf("%d",&T); 16 while(T--){ 17 res=0; 18 scanf("%d",&n); 19 int m=sqrt(n); 20 for(int i=1;i<=m;i++)res+=n/i; 21 for(int i=1;i<=m;i++) 22 res+=(n/i-n/(i+1))*i; 23 if(m==n/m)res-=m; 24 printf("Case %d: %lld\n",++cnt,res); 25 } 26 return 0; 27 }
1245 - Harmonic Number (II)(规律题)
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4946231.html