博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2424 约数和
阅读量:7211 次
发布时间:2019-06-29

本文共 887 字,大约阅读时间需要 2 分钟。

题目背景

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)的值。

 

输入输出样例

输入样例#1:
2 4
输出样例#1:
14
输入样例#2:
123 321
输出样例#2:
72543

说明

对于20%的数据有1≤X<Y≤105。

对于60%的数据有1≤X<Y≤1*107。

对于100%的数据有1≤X<Y≤2*109。

 

/*我们令s[i]=f[1]+f[2]+f[3]+.....          =[i/1]*1+[i/2]*2+[i/3*3]+.....(除法分块)然后我们会发现里边有些值是相同的.so 我们可以用等差数列加速.ans=s[y]-s[x-1].*/#include
#define ll long longusing namespace std;ll solve(ll n){ ll tot=0,last; for(ll i=1;i<=n;i=last+1){ last=n/(n/i); tot+=n/i*((last+i)*(last-i+1)>>1); } return tot;}int main(){ ll x,y; scanf("%lld%lld",&x,&y); printf("%lld",solve(y)-solve(x-1)); return 0;}

 

转载于:https://www.cnblogs.com/shenben/p/6481288.html

你可能感兴趣的文章
Win10 Edge浏览器续航碾压火狐/Chrome
查看>>
支援日本/厄瓜多尔震区 Skype推免费通话
查看>>
怎样为企业挑选正确的EDR解决方案
查看>>
Facebook已经过时,蜂巢新网络崛起
查看>>
大数据会如何影响VC领域?
查看>>
中国光伏新增装机容量猛增
查看>>
数据库建立索引的原则
查看>>
林洋能源:布局能源互联网 分布式光伏龙头再扬帆
查看>>
Swift面向对象基础(中)——Swift中的存储属性和计算属性
查看>>
“是男人就下100层”
查看>>
如何手动实现C语言中的字符串操作
查看>>
Android仿美团加载数据、小人奔跑进度动画对话框(附顺丰快递员奔跑效果)
查看>>
Core Animation基础
查看>>
Protocol Buffers 学习(6):文件 | 字段选项介绍
查看>>
MYSQL数据库与Emoji表情的故事
查看>>
Hexo Reload in new Mac
查看>>
你们觉得这个时代好还是父母那个时代好?
查看>>
用 TypeScript 编写一个 React 服务端渲染库(1)
查看>>
ivar layout 相关知识点
查看>>
移动端h5监听浏览器返回操作(目前在react项目中用到)
查看>>