LightOJ1245 Harmonic Number (II) —— 规律
题目链接:https://vjudge.net/problem/LightOJ-1245
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) —— 规律相关推荐
- 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),数据范围太大,如果我们按 照题目中的代 ...
- Harmonic Number (II) LightOJ - 1245 (找规律?。。。)
题意: 求前n项的n/i 的和 只取整数部分 暴力肯定超时...然后 ...现在的人真聪明...我真蠢 觉得还是别人的题意比较清晰 比如n=100的话,i=4时n/i等于25,i=5时n/i等于20 ...
- LightOJ - 1245 Harmonic Number (II) 求同值区间的和
题目大意:对下列代码进行优化 long long H( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) ...
- light oj -1245 - Harmonic Number (II)
先举个例子,假如给你的数是100的话,将100/2=50;是不是就是100除100-51之间的数取整为1: 100/3=33;100除50到34之间的数为2,那么这样下去到sqrt(100);就可以求 ...
- LightOJ 1245 - Harmonic Number (II)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1245 题意:仿照上面那题他想求这么个公式的数.但是递归太慢啦.让你找公式咯. ...
- Single Number II(LintCode)
Single Number II Given 3*n + 1 numbers, every numbers occurs triple times except one, find it. Examp ...
- leetcode 264. Ugly Number II
传送门 264. Ugly Number II QuestionEditorial Solution My Submissions Total Accepted: 36259 Total Submis ...
- [LeetCode]Single Number II
今天室友推荐了一道LeetCode上面的练习题Single Number II,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来. 第一眼看到这 ...
- Harmonic Number(欧拉公式或技巧打表)LightOJ - 1234(求调和级数的和)
题意:求f(n)=1/1+1/2+1/3+1/4-1/n (1 ≤ n ≤ 108).,精确到10-8 (原题在文末) 知识点:调和级数(即f(n))至今没有一个完全正确的公式,但欧拉给出过一个近似公 ...
最新文章
- 美颜算法之自动祛斑算法实现 | 案例分享
- OpenCV3.4.5带GPU编译error: #error This file requires compiler and library support for the ISO C++ 2011
- 机器学习12推荐系统
- Exchange server 2007搭建私有邮件系统测试备忘
- IPLATUI--下拉列表
- 时序分析基本概念介绍<AOCV>
- 35岁不是职场的终点,而是人生的起点
- xilinx FIFO的使用及各信号的讨论
- 如何画指数函数图像探讨其函数性质
- 西门子s7删除注册表,西门子S7200编程软件卸载步骤
- android 渠道排名,安卓APP渠道效果统计***排名
- mac 命令行小技巧--mas 替代appstore
- CE认证机构有哪些机构?
- 第九章 动态规划-1278:【例9.22】复制书稿(book)
- C++的atof()
- 浅谈Linux下各种压缩 解压命令和压缩比率对比
- js、jQuery 仿酷狗音乐
- SPSS统计分析案例:无空白列重复正交试验设计方差分析
- source insight教程:常用设置、快捷键、附带source insight3.5和4的对比
- 设备栈中各个设备加载顺序
热门文章
- 在线运行java代码并得到结果_Java代码是如何运行的?
- java drools5_【java规则引擎】drools6.5.0版本api简介
- linux备份数据库软件有哪些内容,Linux网络备份MySQL数据库的应用方法
- kotlin button_使用Kotlin和XML的Android Button
- 关于Firefox插件
- 搭建fabric-sample/balance-transfer网络详解
- 四个措施打造安全的DevOps流程
- linux内核sysfs详解【转】
- Android系统之Recovery移植教程 【转】
- 英国科研学术网络Janet遭遇DDoS攻击