洛谷P2424/codevs 2606 约数和
http://codevs.cn/problem/2606/
https://luogu.lohu.info/problem/show?pid=2424
题目背景
Smart最近沉迷于对约数的研究中。
题目描述
对于一个数X,函数f(X)表示X所有约数的和。例如:f(6)=1+2+3+6=12。对于一个X,Smart可以很快的算出f(X)。现在的问题是,给定两个正整数X,Y(X<Y),Smart希望尽快地算出f(X)+f(X+1)+……+f(Y)的值,你能帮助Smart算出这个值吗?
输入输出格式
输入格式:
输入文件仅一行,两个正整数X和Y(X<Y),表示需要计算f(X)+f(X+1)+……+f(Y)。
输出格式:
输出只有一行,为f(X)+f(X+1)+……+f(Y)的值。
输入输出样例
2 4
14
123 321
72543
说明
对于20%的数据有1≤X<Y≤105。
对于60%的数据有1≤X<Y≤1*107。
对于100%的数据有1≤X<Y≤2*109。
记住一点:求[l,r],先想想前缀和[1,r]-[1,l-1]
一开始想到的:
60分TLE
[1,n]数i的出现次数为n/i
就这个还是想了好久,写出来才发现的
智商啊!!!!!
1=1
2=1+2
3=1+ 3
4=1+2+ 4
5=1+ 5
6=1+2+3+ 6
#include<cstdio>
using namespace std;
int x,y;
long long ans;
int main()
{
scanf("%d%d",&x,&y);
for(int i=;i<=x-;i++) ans-=i*((x-)/i);
for(int i=;i<=y;i++) ans+=i*(y/i);
printf("%lld",ans);
}
AC做法:
除法分块
以12为例:
i 1 2 3 4 5 6 7 8 9 10 11 12
出现次数 12 6 4 3 2 2 1 1 1 1 1 1
可以发现数i在[1,n]中的出现次数相同的数是挨在一块的
由于挨着,所以它又是一个等差数列
所以可以出现次数相同的作为一块一起算
设每一块所在区间为[L,R]
可以枚举L,那么R=n/(n/L)
(不要问怎么想出来的,学长说脑子,O| ̄|_ ,需要扶助的智商啊啊啊啊o(≧口≦)o)
所以这一块的ans=每个数的出现次数(n/L)*这一块所包含的的的数的总和
其中这一块所包含的数的总和,用等差数列求和公式 (a1+an)*n/2,可得
=(L+R)*(R-L+1)/2
#include<cstdio>
using namespace std;
long long x,y;
long long work(long long n)
{
long long ans=,i=,j;
while(i<=n)
{
j=n/(n/i);
ans+=(n/i)*(i+j)*(j-i+)/;
i=j+;
}
return ans;
}
int main()
{
scanf("%lld%lld",&x,&y);
printf("%lld",work(y)-work(x-));
}
注意要用long long,因为ans+=后面那一串可能会爆int,70分
于是我就改成了ans+=1ll*(1ll*n/1ll*i)*(1ll*i+1ll*j)*(1ll*j-1ll*i+1)/2;
然后就0了,原因未知。。。
洛谷P2424/codevs 2606 约数和的更多相关文章
- 洛谷 P4902 乘积 (约数筛,前缀和(积))
洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...
- 洛谷 - P2424 - 约数和 - 整除分块
https://www.luogu.org/problemnew/show/P2424 记 \(\sigma(n)\) 为n的所有约数之和,例如 \(\sigma(6)=1+2+3+6=12\) . ...
- 洛谷 P2424 约数和
题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...
- 洛谷—— P2424 约数和
https://www.luogu.org/problem/show?pid=2424 题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f ...
- 洛谷P2424 约数和 题解
题目 约数和 题解 此题可以说完全就是一道数学题,不难看出这道题所求的是 \(\sum\limits_{i=x}^{y}{\sum\limits_{d|i}{d}}\) 的值. 很显然,用暴力枚举肯定 ...
- codevs 2606 约数和问题
题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...
- 洛谷 1016 / codevs 1046 旅行家的预算
https://www.luogu.org/problem/show?pid=1016 http://codevs.cn/problem/1046/ 题目描述 Description 一个旅行家想驾驶 ...
- 洛谷 P3327 【[SDOI2015]约数个数和】
前置芝士 关于这个题,你必须知道一个这样奇奇怪怪的式子啊QAQ \[d(i*j)= \sum_{x|i} \sum_{y|j}[gcd(x,y)=1] \] 留坑,先感性理解:后面那个gcd是为了去重 ...
- codevs 2606 约数和问题 (数学+分块)
题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...
随机推荐
- 关于‘1001.A+B Format (20)’的解题报告
1001.A+B Format(20) 首先要感谢一下指导我github上传问题的小伙伴们,捣腾了一整天我终于摸到了一点门路,真的谢谢你们. 小豪的github 问题描述: Calculate a + ...
- BNUOJ 52303 Floyd-Warshall Lca+bfs最短路
题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52303 Floyd-Warshall Time Limit: 60000msMemory L ...
- 第1阶段冲刺成果—简单运算game(APP)
第1阶段冲刺成果 由于我们团队都没有Android的基础,所以在这一块花了很长的时间去学习探索,就连简单的Android的电脑配置也花了很长的时间,所以其他的DONE的都没有完成,这是失败的地方.但是 ...
- 读《构建之法》一、二、十六章随笔a
第一章 概论 “软件团队要从需求分析开始,把合适的需求梳理出来,然后逐步开展后续工作”:——p3 问题:好的用户体验要从软件分析开始,那么软件分析仅仅是从用户的需求出发吗? 我的看法:需求分析是 ...
- 获取php版本
phpversion()函数可以获取版本 version_compare可以比较两个版本 mixed version_compare ( string $version1 , string $vers ...
- CPU结合CS、IP寄存器进行执行程序
上一篇介绍了CS.IP两个寄存器内容,当我们运行一个可执行文件时,我们需要另外一个程序来将这个可执行文件加载到内存当中,关于这个加载可执行文件的程序,我们在这里不管他,点一下即可,一般是通过操作系统的 ...
- 计算机网络【10】—— Cookie与Session
一.cookie 和session 的区别 a.cookie数据存放在客户的浏览器上,session数据放在服务器上. b.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKI ...
- html实现鼠标悬停变成手型实现方式
1.采用a标签实现的方式 <a href="javascript:void()">内容</a> 2.采用CSS实现的方式 // 变手形 oElement.s ...
- jenkins+maven+Tomcat8实现热部署
个人记录 公司使用jenkins实现代码自动更新并部署 采用jenkins安装方式为war包,版本为:2.138.3,启动方式为Tomcat启动jenkins, 该博客操作步骤有些地方进行简化,各位需 ...
- ReentrantLock详解 以及与synchronized的区别
ReentrantLock lock = new ReentrantLock(); //参数默认false,不公平锁 ReentrantLock lock = new ReentrantLock(tr ...