传送门啦

再一次见证了分块的神奇用法,在数论里用分块思想。

我们要求 $ ans = \sum\limits ^{n} _{i=1} (k % i) $ ,如果我没看错,这个题的暴力有 $ 60 $ 分,当然,不甘平凡的我们怎么能为 $ 60 $ 分折腰,我们来看正解打法。

我们要知道 $ a % b = a-b*\lfloor\frac{a}{b}\rfloor$ 。.

我们代入后得到:

$ ans = \sum\limits^{n}{i=1}(k-i\lfloor\frac{k}{i}\rfloor) = n*k-\sum\limits^{n}{i=1}(i * \lfloor\frac{k}{i}\rfloor) $

然后我们用分块做,我们最后计算 $ n * k $ 减去每一段的和就好了。

开始枚举左端点,根据 $ k $ 计算出右端点:

若 $ \lfloor\frac{k}{l}\rfloor \neq 0 $ , $ r = min(\lfloor\frac{k}{\lfloor\frac{k}{l}\rfloor}\rfloor , n) $ 。

若$ \lfloor\frac{k}{l}\rfloor=0 $ ,$ r=n $。

最后计算每一块的和:

$ sum = \lfloor\frac{k}{l}\rfloor * (r-l+1) *(l+r) / 2$。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; inline long long read(){
char ch = getchar();
long long f = 1 , x = 0;
while(ch > '9' || ch < '0'){if(ch == '-')f = -1;ch = getchar();}
while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + ch - '0';ch = getchar();}
return x * f;
} long long n,k;
long long ans; int main(){
n = read(); k = read();
ans = n * k;
for(int l=1,r;l<=n;l=r+1){
if(k / l != 0) r = min(k / (k / l) , n);
else r = n;
ans -= (k / l) * (r - l + 1) * (l + r) / 2;
}
printf("%lld\n",ans);
return 0;
}

洛谷P2261余数求和的更多相关文章

  1. 洛谷 - P2261 - 余数求和

    https://www.luogu.org/problemnew/show/P2261 看了一下题解,取模运算可以换成减法来做. $a\%b=a-b*\lfloor\frac{a}{b}\rfloor ...

  2. 洛谷P2261 余数求和

    整除分块的小应用. 考虑到 k % x = k - (k / x) * x 所以把 x = 1...n 加起来就是 k * n - (k / i) * i i = 1...k(注意这里是k) 对于这个 ...

  3. 整除分块学习笔记+[CQOI2007]余数求和(洛谷P2261,BZOJ1257)

    上模板题例题: [CQOI2007]余数求和 洛谷 BZOJ 题目大意:求 $\sum^n_{i=1}k\ mod\ i$ 的值. 等等……这题就学了三天C++的都会吧? $1\leq n,k\leq ...

  4. [洛谷P2261] [CQOI2007]余数求和

    洛谷题目链接:[CQOI2007]余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n ...

  5. 洛谷P2261 [CQOI2007] 余数求和 [数论分块]

    题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...

  6. 洛谷 P2261 [CQOI2007]余数求和 解题报告

    P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...

  7. 洛谷 P2261 [CQOI2007]余数求和

    洛谷 一看就知道是一个数学题.嘿嘿- 讲讲各种分的做法吧. 30分做法:不知道,这大概是这题的难点吧! 60分做法: 一是直接暴力,看下代码吧- #include <bits/stdc++.h& ...

  8. 洛谷——P2261 [CQOI2007]余数求和

    P2261 [CQOI2007]余数求和 关键在于化简公式,题目所求$\sum_{i=1}^{n}k\mod i$ 简化式子,也就是$\sum_{i=1}^{n}(k-\frac{k}{i}\time ...

  9. 【洛谷P2261】余数求和

    题目大意:给定 n, k,求\(\sum\limits_{i=1}^n k\%n\) 的值. 题解:除法分块思想的应用. \(x\%y=x-y\lfloor {x\over y}\rfloor\),因 ...

随机推荐

  1. 关于strassen矩阵乘法的矩阵大小不是2^k的形式时,时间复杂度是否还是比朴素算法好的看法

    原来是n,找到大于等于n且是2^k形式的数m.n*n的矩阵补全为m*m的矩阵,原来的矩阵放在最左上方,其它位置的值为0.朴素方法:n^3现在:m^2.8即m/n需小于e^(3/2.8)=2.919才能 ...

  2. 数据中有NA存在,处理办法

    如果数据中有NA存在,表示这个位置数据遗失,不能进行值的类型描述.也不能用函数来计算,需要计算是可以加上na.rm=T表示忽略NA,但是这个位置并没有去除,使用length可以看到. > x&l ...

  3. golang 性能测试pprof

    golang 性能测试包是位于 net/http 包下的 pprof,其相关介绍可以参看具体的 官方文档 有关 golang 性能测试使用特别简单,在 main 包中的引包位置直接引入: import ...

  4. KVM管理概述

    一.使用QEMU管理虚拟机 1.KVM指南 https://activedoc.opensuse.org/book/opensuse-virtualization-with-kvm/part-iii- ...

  5. python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>

    MRO了解: 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法所在的位置.而搜索的顺序就是所谓的「方法解析顺序」(M ...

  6. Shell记录-Shell命令(磁盘)

    inux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式 df [选项] [文件] Shell ...

  7. 算法进阶之Leetcode刷题记录

    目录 引言 题目 1.两数之和 题目 解题笔记 7.反转整数 题目 解题笔记 9.回文数 题目 解题笔记 13.罗马数字转整数 题目 解题笔记 14.最长公共前缀 题目 解题笔记 20.有效的括号 题 ...

  8. new FileInputStream(file)中file不能为文件夹

    今天闲来无事,写了如下程序: package com.xhj.test; import java.io.File; import java.io.FileFilter; import java.io. ...

  9. 用 Love2D 实现法线贴图的例程(到最新版本 0.10.1)

    用 Love2D 实现法线贴图的例程(到最新版本 0.10.1) 概述 一般来说, 复杂的光照模型会被用在 3D 游戏中, 以产生逼真的效果, 不过也有些开发者研究出一些代码可以在 2D 游戏中使用这 ...

  10. 说说JavaScript中的事件模型

    1.javascript中为元素添加事件处理程序的方法有以下几种方式,可以为javascript元素添加事件处理程序 (1) 直接将事件处理代码写在html中(2) 定义一个函数,赋值给html元素的 ...