luogu2261余数求和题解--整除分块
2024-09-01 17:11:11
题目链接
https://www.luogu.org/problemnew/show/P2261
分析
显然\(k\) \(mod\) \(i=k-\lfloor {k/i}\rfloor\) \(\times\) \(i\),于是我们只需要求\(N * k-\sum_{i=1}^N {\lfloor {k/i}\rfloor\times i}\)
这里就需要数论分块,也称作整除分块的知识
结论:
\(\forall{i} \in [x,\lfloor {k/{\lfloor {k/x}\rfloor }}\rfloor]\),\(\lfloor k/i \rfloor\)的值都相等
证明
先咕了....
于是这道题再套个等差数列求和就完了...
代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cctype>
#define ll long long
#define ri register int
using std::min;
using std::max;
ll n,k,ans=0,g;
int main(){
scanf("%lld %lld",&n,&k);
ans=n*k;
for(ri i=1;i<=n;i=g+1){
g= k/i ? min(k/(k/i),n) : n;//如果i大于k的话直接一步把后面的算完
ans -= (i+g)*(g-i+1)/2 * (k/i);
// 等差数列求和 数论分块
}
printf("%lld\n",ans);
return 0;
}
最新文章
- Jenkins学习四:Jenkins 邮件配置
- SQL语句 还原未知逻辑名称数据库
- ffmpeg处理RTMP流媒体的命令 发送流媒体的命令(UDP,RTP,RTMP)
- 关于CSS3的代码总结(部分)
- webrtc学习——mediaStream和MediaStreamTrack
- AFNetworking网络请求的get和post步骤
- 用于展现图表的50种JavaScript库
- 聊天demo SignalR
- vuejs 相关资料
- Visual Studio 2017 ASP.NET Core开发
- 反射模拟DbUtils实现ResultSet转成Bean实例
- TCGA样本命名详解
- ejabberd之开题篇
- java提高(2)---正则表达式(1)常用符号
- Linux系统——JumpServer跳板机的搭建和部署
- [ IOS ] iOS-控制器View的创建和生命周期
- python之threading.local
- IOS的设计模式
- ubuntu使用root权限登录的设置方法
- redhat-2
热门文章
- html文字两行后,就用省略号代替剩下的
- 在testrpc以太坊测试环境部署智能合约
- Androidstudio 编译慢 这样的体验肯定很多人都有!!!
- [Java读书笔记] Effective Java(Third Edition) 第 4 章 类和接口
- mongodb download
- MyEclipse环境的项目改为在Eclipse中运行爬坑记【我】
- [Scikit-learn] 1.4 Support Vector Classification
- hadoop异常: java.io.EOFException: Unexpected end of input stream
- android 超简单的拖动按钮 悬浮按钮 吸附按钮 浮动按钮
- laravel 加载指定版本的mongodb