1968: [Ahoi2005]COMMON 约数研究

Time Limit: 1 Sec Memory Limit: 64 MB

Submit: 1513 Solved: 1154

[Submit][Status][Discuss]

Description

Input

只有一行一个整数 N(0 < N < 1000000)。

Output

只有一行输出,为整数M,即f(1)到f(N)的累加和。

Sample Input

3

Sample Output

5

HINT

Source

Day2

奇怪的姿势,不过非常神!

求1-n的所有数的约数的个数,不妨可以转化一下,题目中f【i】为i的约数个数,但在做题中不妨从1~枚举i,计算后的f【i】表示1~n中约数包含i的数的个数,即约数i对答案的贡献。

然后,思考快速的方法去实现上述要求,不妨先小规模打表找找规律(于是打出N=14的表):



于是我们发现了一个规律,所有对答案贡献相同的i,是必定相邻的,那么要想优化时间,不妨能够枚举中多步跳跃?

于是开始找规律:

首先,一个数i,它对答案的贡献(1~n中 约数包含i的数的个数)为 n/i下取整…(如何证明?)

十分的简单,首先,假使n%i==0,那么1~n中,约数包含i的数的个数必定是n/i,那么当n%i!=0,那些多出来的数的约数是不含i的,那么剩下的便同整除时一样。得证。。。

那么再发现一个规律, 试计算n/(n/i)(/为C++中整除),i取不同的值,于是发现,在同一个周期中(暂且称那些贡献相同的数为一个周期),上述计算值相同,且都为这个周期的末尾。

于是高效率的做法就是,每次都增加n/(n/i)步,答案用(n/(n/i)-i+1)*(n/i)来统计即可,如此效率大概是O(logn)级的,于是顺利完成。

简短的代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long ans=0;
int n; int main()
{
scanf("%d",&n);
for (int i=1,j=0; i<=n; i=j+1)
j=n/(n/i),ans+=(j-i+1)*(n/i);
printf("%lld\n",ans);
return 0;
}

BZOJ-1968 COMMON 约数研究 数论+奇怪的姿势的更多相关文章

  1. BZOJ1968 [Ahoi2005]COMMON 约数研究 数论

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1968 题意概括 求 ΣF(i)   (1<=i<=n)N<=1000000 F( ...

  2. B1968 [Ahoi2005]COMMON 约数研究 数论

    大水题,一分钟就做完了...直接枚举1~n就行了,然后在n中判断出现多少次. 题干: Description Input 只有一行一个整数 N(0 < N < 1000000). Outp ...

  3. 【BZOJ】【1968】【AHOI2005】COMMON 约数研究

    数论 原谅我这么傻逼的题都不会做…… 或许写成数学公式的形式比较容易想到解法? $$ans=\sum_{i=1}^n \sum_{d|i} 1$$ ……是不是感觉很水呀……是吧……改成先枚举d再枚举 ...

  4. BZOJ 1968: [Ahoi2005]COMMON 约数研究

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2032  Solved: 1537[Submit] ...

  5. BZOJ 1968: [Ahoi2005]COMMON 约数研究 水题

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...

  6. BZOJ 1968: [Ahoi2005]COMMON 约数研究(新生必做的水题)

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2351  Solved: 1797 [Submi ...

  7. bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究

    http://www.lydsy.com/JudgeOnline/problem.php?id=1968 换个角度 一个数可以成为几个数的约数 #include<cstdio> #incl ...

  8. [Ahoi2005]COMMON 约数研究 【欧拉线性筛的应用】

    1968: [Ahoi2005]COMMON 约数研究 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 2939  Solved: 2169 [Submi ...

  9. BZOJ 1968_P1403 [AHOI2005]约数研究--p2260bzoj2956-模积和∑----信息学中的数论分块

    第一部分 P1403 [AHOI2005]约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一 ...

随机推荐

  1. Jenkins学习六:修改Jenkins用户的密码

    很多时候在使用jenkins的时候忘记密码了,遇到这种情况,可以看看下面的讲解. Jenkins专有用户的数据存放在JENKINS_HOME/users目录.users目录的结构你一看就懂.users ...

  2. linux --备份oracle

    1.exp\imp 导入导出命令使用exp username/pwd@sid file=path.dmp owner=user 不导出表数据:rows=n举例:exp iflashbuy/qwerwh ...

  3. jquery堆栈与队列

    期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待期待

  4. 10Spring_AOP编程(传统编程)

    注意我写这篇文章的思路,要想做切面编程,包含两个部分,通知和切点,通知是你要做哪些增强,切点是指你要拦截哪些方法.先介绍通知的定义再去介绍切点的定义.这篇文章我取名叫做Spring_AOP编程(传统编 ...

  5. Lambda表达式关于like问题(未解决)

    参考文章: http://stackoverflow.com/questions/3616215/like-in-lambda-expression-and-linq 1. c=>c.name. ...

  6. MVC3 使用 FusionCharts 做报表

    环境 VS2010+SQL2008 +MVC3 报表思路 1.新建报表需要的数据表,FusionCharts将直接获取数据表的数据进行展示 2.使用SQL代理,通过存储过程定时生成数据表的数据,只添加 ...

  7. 集锦.txt

    不同的时代,有不同的需要以前,我们都以为自己可以为爱情去死,可是后来爱情死了,我们还活着. 小时候男孩子喜欢电动玩具,女孩子喜欢娃娃.长大了男孩子喜欢娃娃,女孩子喜欢电动玩具.也许这就是成长吧! 我大 ...

  8. How to configure SRTM elevations in WorldWind WMS

    In this thread I will try to explain how to serve SRTM elevations using NASA WorldWind WMS. ! Import ...

  9. PowerDesigner16建表在SQL SERVER 2008报 对象名 'sysproperties' 无效。

    http://blog.itpub.net/30150152/viewspace-1454979/

  10. 减少图片HTTP 请求的方案

    <Higb Performance Web Sites>(中文名:“高性能网站建设指南”)这本书对于前端工程师来说,绝对值得一读.本人有幸从公司借阅了,但不幸的是感觉翻译有点怪怪的.尤其是 ...