BZOJ 1257 - 余数之和 - [CQOI2007]
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257
题意:
给定正整数 $n,k$,求 $(k \bmod 1) + (k \bmod 2) + \cdots + (k \bmod n) = \sum_{i=1}^{n}(k \bmod i)$ 的值。
题解:
显然 $k \bmod i = k - \lfloor k/i \rfloor \times i$,因此 $\sum_{i=1}^{n}(k \bmod i) = \sum_{i=1}^{n}(k - \lfloor k/i \rfloor \times i) = n \cdot k - \sum_{i=1}^{n}(\lfloor k/i \rfloor \times i)$。
对于任意正整数 $x \in [1,k]$, 设 $g(x) = \lfloor \frac{k}{\lfloor k/x \rfloor} \rfloor$,不难得出 $\lfloor k/x \rfloor \le k/x \Rightarrow \frac{k}{\lfloor k/x \rfloor} \ge \frac{k}{k/x} \Rightarrow \lfloor \frac{k}{\lfloor k/x \rfloor} \rfloor \ge \lfloor \frac{k}{k/x} \rfloor$,即 $g(x) \ge \lfloor \frac{k}{k/x} \rfloor = \lfloor x \rfloor = x$。
又根据 $f(x) = \frac{k}{x}$ 是一个单调递减函数,得到
$f(g(x)) \le f(x) \Rightarrow \frac{k}{g(x)} \le \frac{k}{x} \Rightarrow \lfloor \frac{k}{g(x)} \rfloor \le \lfloor \frac{k}{x} \rfloor$
另一方面,根据 $g(x) \le \frac{k}{\lfloor k/x \rfloor}$ 还能得出

因此,综上可以得出 $\lfloor \frac{k}{g(x)} \rfloor = \lfloor \frac{k}{x} \rfloor$;也就是说,对于任意的正整数 $i \in [x,g(x)]$,$\lfloor \frac{k}{i} \rfloor$ 都是相等的。
而与此同时,对于任意的正整数 $i \in [1,k]$,$\lfloor \frac{k}{i} \rfloor$ 的值最多只有 $2 \sqrt{k}$ 个,这是因为:
当 $i \le \sqrt{k}$ 时,$i$ 最多只有 $\sqrt{k}$ 个选择,相对应地,$\lfloor \frac{k}{i} \rfloor$ 也就最多 $\sqrt{k}$ 个值;而当 $i > \sqrt{k}$ 时,$\lfloor \frac{k}{i} \rfloor \le \frac{k}{i} < \sqrt{k}$,即 $\lfloor \frac{k}{i} \rfloor$ 只能取 $1 \sim \sqrt{k}$ 之间的值。
所以,对于任意的正整数 $i \in [1,k]$,$\lfloor \frac{k}{i} \rfloor$ 的值划分成 $O(\sqrt{k})$ 段。每一段上 $i \in [x,g(x)]$,$\lfloor \frac{k}{i} \rfloor$ 的值都等于 $\lfloor \frac{k}{x} \rfloor$。而在这一段中,$\sum_{i=x}^{g(x)}(\lfloor k/i \rfloor \times i) = \lfloor k/x \rfloor \sum_{i=x}^{g(x)}i$,即一个等差数列的求和。因此这个算法时间复杂度为 $O(\sqrt{k})$。
AC代码:
/**************************************************************
Problem: 1257
User: Dilthey
Language: C++
Result: Accepted
Time:20 ms
Memory:1288 kb
****************************************************************/ #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll n,k,ans;
inline ll g(ll x){return k/(k/x);}
inline ll sum(ll L,ll R){return (L+R)*(R-L+)/;}
int main()
{
while(cin>>n>>k)
{
ll ans=n*k;
n=min(n,k);
for(ll x=;x<=n;x=g(x)+)
{
ll y=min(g(x),n);
ans-=(k/x)*sum(x,y);
}
cout<<ans<<endl;
}
}
BZOJ 1257 - 余数之和 - [CQOI2007]的更多相关文章
- BZOJ - 1257 余数之和(数学)
题目链接:余数之和 题意:给定正整数$n$和$k$,计算$k\%1+k\%2+\dots+k\%n$的值 思路:因为$k\%i=k-\left \lfloor \frac{k}{i} \right \ ...
- BZOJ 1257 余数之和
Description 给出正整数\(n\)和\(k\),计算\(j(n, k)=k\;mod\;1\;+\;k\;mod\;2\;+\;k\;mod\;3\;+\;-\;+\;k\;mod\;n\) ...
- BZOJ 1257 余数之和sum
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1257 题意:计算sigama(m%i)(1<=i<=n). 思路: 这样就简 ...
- [bzoj] 1257 余数之和sum || 数论
原题 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值,其中k mod i表示k除以i的余数. \(\sum^n_{i=1} ...
- bzoj 1257 余数之和 —— 数论分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 \( \sum\limits_{i=1}^{n}k\%i = \sum\limits_ ...
- BZOJ 1257 余数之和 题解
题面 这道题是一道整除分块的模板题: 首先,知道分块的人应该知道,n/i最多有2*sqrt(n)种数,但这和余数有什么关系呢? 注意,只要n/i的值和n/(i+d)的值一样,那么n%i到n%(i+d) ...
- BZOJ 1257 余数之和sum(分块优化)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=46954 题意:f(n, k)=k mod 1 + k mod 2 ...
- 【BZOJ1257】【CQOI2007】余数之和sum
Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如j(5, ...
- Bzoj 1257 [CQOI2007]余数之和 (整除分块)
Bzoj 1257 [CQOI2007]余数之和 (整除分块) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 一道简单题. 题目 ...
随机推荐
- 查看oracle当前的连接数
SQL> select count(*) from v$session #当前的连接数SQL> Select count(*) from v$session where status='A ...
- python3 使用pip安装(命令行中)失败或 “not a supported wheel” 解决方案!
原因1: 安装的不是对应python版本的库,下载的库名中cp36代表python3.6,其它同理. 原因2:(我遇到的情况----下载的是对应版本的库,然后仍然提示不支持当前平台) 百度了一下,说法 ...
- What a Ridiculous Election UVALive - 7672 (BFS)
题目链接: E - What a Ridiculous Election UVALive - 7672 题目大意: 12345 可以经过若干次操作转换为其它五位数. 操作分三种,分别为: 操作1:交 ...
- Linux配置日志服务器
title: Linux配置日志服务器 tags: linux, 日志服务器 --- Linux配置日志服务器 日志服务器配置文件:/etc/rsyslog.conf 服务器端: 服务器IP如下: 编 ...
- android studio发布项目到github
点击file setting ,打开对话框,如下,判断git是否安装成功 选择GitHub,填写github地址及密码 发布项目:
- 微信小程序【获取验证码】倒计时效果
最近开始接触微信小程序,会记录一些相关的小功能——例如这次是点击[获取验证码]按钮出现的倒计时效果. 原文: http://blog.csdn.net/Wu_shuxuan/article/detai ...
- CSP应用开发-CryptAPI函数库介绍
基本加密函数为开发加密应用程序提供了足够灵活的空间.所有CSP的通讯都是通过这些函数.一个CSP是实现所有加密操作的独立模块.在每一个应用程序中至少需要提供一个CSP来完成所需的加密操作.如果使用多于 ...
- FM算法(二):工程实现
主要内容: 实现方法 Python实现FM算法 libFM 一.实现方法 1.FM模型函数 变换为线性复杂度的计算公式: 2.FM优化目标 根据不同的应用,FM可以采用不同的损失函数loss fu ...
- Python编码规范(PEP8)
Introduction 介绍 本文提供的Python代码编码规范基于Python主要发行版本的标准库.Python的C语言实现的C代码规范请查看相应的PEP指南1. 这篇文档以及PEP 257(文档 ...
- java设计模式自我总结---适配器模式
上一篇博客说完了 java 23 中设计模式中的五种 创建性模式,由于篇幅过长,新开一贴今天开始学习结构型模式, 结构型模式包括以下七种:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式. ...