AcWing 199. 余数之和 题解

做了一下午……题解都看不懂,最后自己比比划划弄懂了。

题意:给出 n,k,求 i=1nkmodi

首先取模形式十分不好处理,所以我们可以根据取模运算定义做一个小小的变换:

i=1nkmodi=i=1nkkii

提取出定值 k,进一步简化为求

nki=1nkii

我们发现重点在于求 i=1nkii

我们可以尝试寻找规律,不难发现 ki 的值呈块状分布(即结果数组分成若干块,每块中值相等),这种东西还有另一个名字:整除分块。

首先一个块内部的答案显然是好求的,设块起点为 l,终点为 r,则块的贡献为 kli=lri

由于第一个块起点已知(1),第二个块的起点即为第一个块终点加一,所以我们需要快速根据起点求出一个块的重点。

首先由于块内值都相同,可以设 x=kl=kr

根据 x=kr 可变形得 xrk,rkx,根据 x=klrkkl

最后分析一下这么做的时间效率:

i>n 时,kin ,也就是说原式只有小于 k 种取值。

in 时,i 只有小于 k 种取值,也就是说原式也只有小于 k 种取值。

所以最多有 2n 个块,我们对于每个块可以 o(1) 计算,时间可以通过。

posted @   Aurora_Borealis  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示