博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1257 [CQOI2007]余数之和sum(分块)
阅读量:5147 次
发布时间:2019-06-13

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

 

【题目链接】 

 

【题目大意】

  给出正整数n和k,计算j(n,k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值

 

【题解】

  我们发现k%i=k-[k/i]*i,j(n,k)=n*k-∑[k/i]*i,我们知道[k/i]的取值不超过k^(1/2)个,

  并且在分布上是连续的,所以我们可以分段求和,对于段开头l,其段结尾r=k/[k/l]。

 

【代码】

#include 
#include
using namespace std;typedef long long LL;LL n,k;int main(){ while(~scanf("%lld%lld",&n,&k)){ LL r,ans=n*k; if(n>k)n=k; for(LL l=1;l<=n;l=r+1){ LL u=k/l; r=min(k/u,n); ans-=(l+r)*(r-l+1)*u/2; }printf("%lld\n",ans); }return 0;}

转载于:https://www.cnblogs.com/forever97/p/bzoj1257.html

你可能感兴趣的文章
清华大学《C++语言程序设计基础》线上课程笔记02---类与对象
查看>>
第二周进度条博客
查看>>
hdu 4359 Easy Tree DP? ( dp )
查看>>
公司最喜欢问的Java集合类
查看>>
jxl导入/导出excel
查看>>
angularJs的各种服务和指令的使用场景
查看>>
Rabbitmq集群高可用部署详细
查看>>
Mac搭建Java开发环境
查看>>
C#尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
查看>>
#231-D: declaration is not visible outside of function
查看>>
matlab程序性能优化与混合编程技术介绍
查看>>
推荐学习笔记-协同过滤2
查看>>
英语语法
查看>>
C++标准库简介(转)
查看>>
Linux从入门到精通——控制服务
查看>>
android图片下载问题
查看>>
高并发场景下System.currentTimeMillis()的性能优化
查看>>
OpenCV&Qt学习之三——图像的初步处理
查看>>
常用命令备查
查看>>
大道至简(第四章)读后感
查看>>