当前位置: 首页 > news >正文

洛谷P2261 [CQOI2007] 余数求和

原题

题目描述

给出正整数\(n\)\(k\), 请计算

\[G(n, k) = \sum_{i=1}^{n} k \bmod i \]

其中\(k \bmod i\)表示k除以i的余数。

输入格式

输入只有一行两个整数,分别表示\(n\)\(k\)

输出格式

输出一行一个整数表示答案。

数据规模与约定

  • 对于\(30%\)的数据,保证 \(n, k \leq 10^3\)
  • 对于\(60%\)的数据,保证 \(n, k \leq 10^6\)
  • 对于\(100%\)的数据,保证 \(1 \leq n, k \leq 10^9\)

整理&思路

这道题的常规暴力思路就是:

for(int i=1;i<=n;i++)sum+=k%i;

但是很明显,这道题没有这么简单。首先就是精度的问题,其次就是时间的问题——这样的O(n)太慢了。
这时候我们就可以利用这样的神秘小定理
首先 \(a \bmod b = a - b * \lfloor \frac{a}{b} \rfloor\),所以我们就可以得到这样的东西:

\[ans = \sum_{i=1}^{n} k - i * \lfloor \frac{k}{i} \rfloor = n * k - \sum_{i-1}^{n} i * \lfloor \frac{k}{i} \rfloor \]

显然\(\lfloor \frac{k}{i} \rfloor\)大约有\(\sqrt{k}\)种取值,所以就可以得到下面的代码,复杂度\(O(\sqrt{k})\)

#include<bits/stdc++.h>
#define int long long
using namespace std;int n, k;signed main() {scanf("%lld%lld",&n,&k);int sum=0;for(int l=1,r,t;l<=n;l=r+1)r=(t=k/l) ? min(k/t,n) : n,sum-=t*(r-l+1)*(l+r)>>1;printf("%lld",sum+n*k);return 0;
}

恭喜AC!

http://www.jsqmd.com/news/1443/

相关文章:

  • 负载排查和优化
  • 挑战骑行距离新记录:46公里
  • arc206 总结
  • 科研必读|提升酿酒酵母表达蛋白产量的关键技术
  • 【RK3576】【Android14】如何在Android14下单独编译kernel-6.1? - 详解
  • 完整教程:栈与队列的实现方式与应用解惑
  • 完整教程:uniapp、devceo华为鸿蒙运行模拟器报错:未开启Hyper-V
  • 深入解析:08_多层感知机
  • 9.8C++作业 - 实践
  • (一)React面试(虚拟DOM/类组件) - 详解
  • 浏览器访问页面卡顿刷新页面方法
  • 完整教程:散斑深度相机原理
  • k8s Understanding Kubernetes Security Components
  • 如何用 Dify 无代码工作流实现 AI 自动化抓取与分析 LinkedIn 招聘数据
  • 2025/9/22
  • WSL+共享文件夹搭建zephyr工作环境
  • 如果 Spring Cloud Feign 配置了 OkHttp3 非阻塞 IO(NIO),那么还需要reactor 模型来提高性能吗
  • 数据结构-单链表基础2
  • LLM的MCP协议通讯方式详解:Stdio、SSE与流式HTTP的选择与实践 - 详解
  • G1垃圾回收过程
  • Trellix自动化大规模修复开源漏洞,已修补超6万个项目
  • AI 编程工具选型速览(2025-09 版) - 详解
  • 爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
  • Vben Admin5.0 keepAlive缓存和onActivated未生效
  • yakit + proxifier 解决`all tls strategy failed报错
  • 版本速递 | 华为云Versatile智能体平台 新增特性介绍(2025年9月发布)
  • 详细介绍:传输层TCP 与 安全层SSL/TLS
  • PE程序常见脱壳方案
  • spring ai基于内存RAG尝鲜
  • 基于 IOCP 的协程调度器——零基础深入浅出 C++20 协程