题目链接:https://vjudge.net/problem/LightOJ-1245

1245 - Harmonic Number (II)
    PDF (English) Statistics Forum
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

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

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

题意:

对于一个数n,求出 sigma(n/k), 1<=k<=n。

题解:

1.由于n<=2^31,直接暴力不不可能的。

2.手写一下可发现一个规律, 当 n/i = k时, i的范围为 (n/(k+1), n/k],即有n/k- n/(k+1) 个 i 使得n/i = k。

3.有了上述结论之后,就可以降低暴力程度了,设 m = sqrt(n)。先从1枚举到m,求出n/i的和,这样 [1,m] 这个区间的求值就解决了,还剩 [m+1, n] 这个区间:从m递减枚举到1,求出k*(n/k - n/(k+1))的和,这样就求出了[ n/m, n]的值,当 n/m==m时,即开始下标为m,则区间为[m,n],所以在m的位置重复计算了,需要减去m;当n/m!=m,即n/m>m时,其实下标为m+1,所以区间为 [m+1,n]。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <cmath>
 7 #include <queue>
 8 #include <stack>
 9 #include <map>
10 #include <string>
11 #include <set>
12 using namespace std;
13 typedef long long LL;
14 const int INF = 2e9;
15 const LL LNF = 9e18;
16 const int mod = 1e9+7;
17 const int MAXM = 1e5+10;
18 const int MAXN = 1e6+10;
19
20 int main()
21 {
22     int T, n, kase = 0;
23     scanf("%d", &T);
24     while(T--)
25     {
26         scanf("%d", &n);
27         int m = sqrt(n);
28
29         LL ans = 0;
30         for(int i = 1; i<=m; i++) ans += n/i;
31         for(int i = 1; i<=m; i++) ans += 1LL*i*(n/i - n/(i+1));
32         if(n/m==m) ans -= m;
33         printf("Case %d: %lld\n", ++kase, ans);
34     }
35 }

View Code

转载于:https://www.cnblogs.com/DOLFAMINGO/p/8366296.html

LightOJ1245 Harmonic Number (II) —— 规律相关推荐

  1. Harmonic Number (II) LightOJ - 1245(找规律?大数f(n)=n/1+n/2+n/3+......+n/n)

    题意:让我们求f(n)=n/1+n/2+n/3+......+n/n:同时注意n/i取整: 思路:首先我们先看数据的范围,n (1 ≤ n < 2 31),数据范围太大,如果我们按 照题目中的代 ...

  2. Harmonic Number (II) LightOJ - 1245 (找规律?。。。)

    题意: 求前n项的n/i  的和 只取整数部分 暴力肯定超时...然后 ...现在的人真聪明...我真蠢 觉得还是别人的题意比较清晰 比如n=100的话,i=4时n/i等于25,i=5时n/i等于20 ...

  3. LightOJ - 1245 Harmonic Number (II) 求同值区间的和

    题目大意:对下列代码进行优化 long long H( int n ) {     long long res = 0;     for( int i = 1; i <= n; i++ )   ...

  4. light oj -1245 - Harmonic Number (II)

    先举个例子,假如给你的数是100的话,将100/2=50;是不是就是100除100-51之间的数取整为1: 100/3=33;100除50到34之间的数为2,那么这样下去到sqrt(100);就可以求 ...

  5. LightOJ 1245 - Harmonic Number (II)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1245 题意:仿照上面那题他想求这么个公式的数.但是递归太慢啦.让你找公式咯. ...

  6. Single Number II(LintCode)

    Single Number II Given 3*n + 1 numbers, every numbers occurs triple times except one, find it. Examp ...

  7. leetcode 264. Ugly Number II

    传送门 264. Ugly Number II QuestionEditorial Solution My Submissions Total Accepted: 36259 Total Submis ...

  8. [LeetCode]Single Number II

    今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...

  9. Harmonic Number(欧拉公式或技巧打表)LightOJ - 1234(求调和级数的和)

    题意:求f(n)=1/1+1/2+1/3+1/4-1/n (1 ≤ n ≤ 108).,精确到10-8 (原题在文末) 知识点:调和级数(即f(n))至今没有一个完全正确的公式,但欧拉给出过一个近似公 ...

最新文章

  1. 美颜算法之自动祛斑算法实现 | 案例分享
  2. OpenCV3.4.5带GPU编译error: #error This file requires compiler and library support for the ISO C++ 2011
  3. 机器学习12推荐系统
  4. Exchange server 2007搭建私有邮件系统测试备忘
  5. IPLATUI--下拉列表
  6. 时序分析基本概念介绍<AOCV>
  7. 35岁不是职场的终点,而是人生的起点
  8. xilinx FIFO的使用及各信号的讨论
  9. 如何画指数函数图像探讨其函数性质
  10. 西门子s7删除注册表,西门子S7200编程软件卸载步骤
  11. android 渠道排名,安卓APP渠道效果统计***排名
  12. mac 命令行小技巧--mas 替代appstore
  13. CE认证机构有哪些机构?
  14. 第九章 动态规划-1278:【例9.22】复制书稿(book)
  15. C++的atof()
  16. 浅谈Linux下各种压缩 解压命令和压缩比率对比
  17. js、jQuery 仿酷狗音乐
  18. SPSS统计分析案例:无空白列重复正交试验设计方差分析
  19. source insight教程:常用设置、快捷键、附带source insight3.5和4的对比
  20. 设备栈中各个设备加载顺序

热门文章

  1. 在线运行java代码并得到结果_Java代码是如何运行的?
  2. java drools5_【java规则引擎】drools6.5.0版本api简介
  3. linux备份数据库软件有哪些内容,Linux网络备份MySQL数据库的应用方法
  4. kotlin button_使用Kotlin和XML的Android Button
  5. 关于Firefox插件
  6. 搭建fabric-sample/balance-transfer网络详解
  7. 四个措施打造安全的DevOps流程
  8. linux内核sysfs详解【转】
  9. Android系统之Recovery移植教程 【转】
  10. 英国科研学术网络Janet遭遇DDoS攻击