除法分块 luogu2261 (坑)
除法分块
除法分块 是指使用分块计算的方法求S=∑i=1n⌊ki⌋S=\sum^{n}_{i=1}{\lfloor{\frac{k}{i}}\rfloor}S=i=1∑n⌊ik⌋的值。
举个例子。当 n=20n=20n=20 时,有
| iii | 111 | 222 | 333 | 444 | 555 | 666 | 777 | 888 | 999 | 101010 | 111111 | 121212 | ……… |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ⌊20i⌋\lfloor\frac{20}{i}\rfloor⌊i20⌋ | 202020 | 101010 | 666 | 555 | 444 | 333 | 222 | 222 | 222 | 222 | 111 | 111 | ……… |
我们可以把 ∀i∈[1,n]\forall i\in[1,n]∀i∈[1,n] 分成若干块,使得每块的 ∀i\forall i∀i 除 nnn 的值向下取整后相等。
∴S=20+10+6+5+4+3+2×4+1×10\therefore S=20+10+6+5+4+3+2\times4+1\times10∴S=20+10+6+5+4+3+2×4+1×10。
题目描述 luogu2261\text{luogu2261}luogu2261
给出正整数 nnn 和 kkk 计算 G(n,k)=k  mod  1+k  mod  2+k  mod  3+⋯+k  mod  nG(n, k)=k\ \bmod\ 1 + k\ \bmod\ 2 + k\ \bmod\ 3 + \cdots + k\ \bmod\ nG(n,k)=k mod 1+k mod 2+k mod 3+⋯+k mod n的值。
输入格式
两个整数 n,kn,kn,k。
输出格式
答案。
输入样例
10 5
输出样例
29
说明
对于 30%30\%30% 的数据,有 n,k≤1000n , k \leq 1000n,k≤1000;
对于 60%60\%60% 的数据,有 n,k≤106n , k \leq 10^6n,k≤106;
对于 100%100\%100% 的数据,有 n,k≤109n , k \leq 10^9n,k≤109。
Solution 2261\text{Solution 2261}Solution 2261
根据定义,有 kmod  n=k−n×⌊kn⌋k\mod n=k-n\times\lfloor\frac{k}{n}\rfloorkmodn=k−n×⌊nk⌋
依题意得G(n,k)=∑i=1n(kmod  i)=∑i=1n(k−i×⌊ki⌋)=nk−∑i=1n(i×⌊ki⌋)\begin{aligned}
G(n,k)&=\sum_{i=1}^{n}{(k\mod i)}\\
&=\sum_{i=1}^{n}{(k-i\times\lfloor\frac{k}{i}\rfloor)}\\
&=nk-\sum_{i=1}^{n}{(i\times\lfloor\frac{k}{i}\rfloor)}
\end{aligned}G(n,k)=i=1∑n(kmodi)=i=1∑n(k−i×⌊ik⌋)=nk−i=1∑n(i×⌊ik⌋)
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,k;
int main(){
scanf("%lld%lld",&n,&k);
ll ans=n*k,r;
for(ll l=1;l<=n;l=r+1){
if(k/l) r=min(n,k/(k/l));
else r=n;
ans-=(r-l+1)*(k/l)*(l+r)/2;
}
printf("%lld",ans);
}
除法分块 luogu2261 (坑)的更多相关文章
- 杭电多校第七场 1010 Sequence(除法分块+矩阵快速幂)
Sequence Problem Description Let us define a sequence as below f1=A f2=B fn=C*fn-2+D*fn-1+[p/n] Your ...
- 【BZOJ】1257: [CQOI2007]余数之和(除法分块)
题目 传送门:QWQ 分析 大佬和我说本题是除法分块,莫比乌斯反演中也有用到. QwQ我不会莫比乌斯反演啊~ 题目让我们求 $ \sum_{i=1}^n k\mod n $ 然后根据$ a \mo ...
- P2424 约数和 && 真丶除法分块
P2424 约数和 题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f ...
- HDU-6395 多校7 Sequence(除法分块+矩阵快速幂)
Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- bzoj1257[CQOI2007]余数之和(除法分块)
1257: [CQOI2007]余数之和 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 6117 Solved: 2949[Submit][Statu ...
- Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x, ...
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- AcWing 199. 余数之和 (除法分块)打卡
给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod ...
- HDU6395-Sequence 矩阵快速幂+除法分块 矩阵快速幂模板
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. Solution ...
随机推荐
- SqlServer 2014还原数据库时提示:无法在已有的""上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
场景 SQL Server 2014在还原数据库时提示: 无法在已有的""上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件... 实现 在还 ...
- hibernate集成ehcahe进行缓存管理
ehcace是现在非常流行的缓存框架,有轻量.灵活.可扩展.支持集群/分布式等优点. 在项目中,使用ehcace可以对数据进行缓存(一般使用.基于注解.基于aop),使用filter可以对页面进行缓存 ...
- 从零开始入门 K8s | 应用编排与管理:Job & DaemonSet
一.Job 需求来源 Job 背景问题 首先我们来看一下 Job 的需求来源.我们知道 K8s 里面,最小的调度单元是 Pod,我们可以直接通过 Pod 来运行任务进程.这样做将会产生以下几种问题: ...
- 【Django】ajax(多对多表单)
1.前后端交互 <div class="shade hide"></div> <!--遮罩层,全屏--> <div class=" ...
- 为什么不使用SOAP进行点对点联系,而使用ESB呢
图片截至: https://www.zhihu.com/question/29475224
- 小鸟初学Shell编程(七)变量引用及作用范围
变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...
- Enum枚举的使用实现
业务中涉及到的状态字段或者简单的选择项的使用. 例如: 1.定义enum枚举类. package com.yjl.enums; import java.util.Objects; public enu ...
- Redis 搭建一主二从三哨兵高可用集群
1.单个redis服务搭建请参考:redis服务搭建 2.在/usr/local下创建目录redis-cluster,并在redis-cluster下创建 6379.6380.6381目录以及data ...
- Android自动跳过app开屏广告
跳过开屏广告,体验流畅人生 开屏广告 是应用启动时显示的广告,一般右下角(或右下角)有倒计时跳过,不主动点击就会 等待3到5秒 后再进入App 自动跳过 是跳过应用的开屏广告的App 一图胜千文,来我 ...
- 面试官:你有m个鸡蛋,如何用最少的次数测出鸡蛋会在哪一层碎?
假设你面前有一栋n层的大楼和m个鸡蛋,假设将鸡蛋从f层或更高的地方放扔下去,鸡蛋才会碎,否则就不会.你需要设计一种策略来确定f的值,求最坏情况下扔鸡蛋次数的最小值. leetcode原题链接 乍一看这 ...