整除分块是个啥:要求\(∑_{i = 1}^n{n/i}\) 的值,这时候暴力需要O(n)的时间。由于这个区间是连续的,且’/'是向下取整,当i不能整除k时,n/i会等于最小的i(也就是区间最左边的值 L)除n的商。此时如果可以很快的找到这一个区间,那么就可以将时间复杂度降到\(O(\sqrt{n})\)。 接下来讲一下怎么去找这个区间:

假设 n = 20,然后打表

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
20/i 20 10 6 5 4 3 2 2 2 2 1 1 1 1 1 1 1 1 1 1

看到这个表不难发现规律,用20再去除以 (20/i) 就等于最后一个等于这个值的数,比如说 当i=7时,20/i=2,那么用20/(20/7) = 10, 这个时候10就是20/i等于2的最后一个值。可以利用这个特性,在区间最左边用O(1)的时间就可以计算出区间最右边的坐标。在这个区间内,所有的值都是相同的,所以找到这个区间后,直接用区间长度乘以单个数值就ok。

// Core Code
ll G(ll n) {
ll cnt = 0;
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l); // 区间最右边
cnt += (n / l) * (r - l + 1);
}
return cnt;
}

Next:余数求和 要求\(∑_{i = 1}^n{k\ \%\ i}\)

\[∑_{i = 1}^n{k\ \%\ i} = ∑_{i = 1}^n{k - i * (k / i)} = n * k - ∑_{i = 1}^n{i * (k/i)}
\]

在每一段(L,R)中 k/i = k/L ,所以在相加的时候可以当作公因式提出来。\(∑_{i = 1}^ni\)相当于一个等差数列。由等差数列求和公式可得: (R-L+1) * (L+R) / 2。

所以每一段(L,R)的和可以表示为 k/L * (R-L+1) * (L+R) / 2。

// RioTian 21/03/03
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll n, k, cnt;
int main() {
cin >> n >> k;
cnt = n * k;
for (ll l = 1, r; l <= n; l = r + 1) {
if (k / l != 0)
r = min(n, k / (k / l));
else
r = n;
cnt -= (k / l) * (r - l + 1) * (l + r) / 2;
}
cout << cnt << "\n";
return 0;
}

牛客 | 小G的约数引起的对于 整数分块 学习的更多相关文章

  1. 牛客 小a与星际探索 bfs

    链接:https://ac.nowcoder.com/acm/contest/317/C?&headNav=acm来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ ...

  2. 牛客网——G送分了(py)

    链接:https://www.nowcoder.net/acm/contest/74/G来源:牛客网 题目描述 杭州人称傻乎乎的人为62,而嘟嘟家这里没有这样的习俗. 相比62,他那里的人更加讨厌数字 ...

  3. 牛客网——G大水题

    链接:https://www.nowcoder.net/acm/contest/75/G来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  4. 牛客 小a与星际探索

    链接:https://ac.nowcoder.com/acm/contest/317/C来源:牛客网 小a正在玩一款星际探索游戏,小a需要驾驶着飞船从1号星球出发前往n号星球.其中每个星球有一个能量指 ...

  5. 牛客网-n的约数【dfs】

    题目描述:戳这里 解题思路:这题思路好想,n最多也就是20个不同的素数相乘,把所有可能的素数找到,然后枚举素数个数就行了. n = p1^q1 + p2^q2 + p3 ^q3 + ... + pi ...

  6. 牛客-小a的旅行计划 + 数学推导

    小a的旅行计划 题意: 小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为,同时小b也想出去游玩.由于一些特殊♂原因,他们的旅行计划必须满足一些条件 首先,他们可以从这N个景点中任意选 ...

  7. 牛客-小y的盒子

    题目传送门 -------------------稍加观察就会发现,4n - 1就是题目要的答案.至于为什么,看官方的题解.不过这个n非常的大,用正常快速幂解决不了.这道题我学到的就是解决幂非常大的情 ...

  8. 牛客-小w的a=b问题

    题目传送门 sol1:老实做,预处理出所有2到1e5的素数,对所有数进行分解质因数,然后对比因子个数.感觉有点卡常,用了快读然后多次优化之后才过的,map也用上了. 素数筛,快速分解质因数 #incl ...

  9. 2019牛客多校第三场A Graph Games 分块思想

    题意:给你一张无向图,设s(x)为与x直接相连的点的集合,题目中有两种操作: 1:1 l r 将读入的边的序列中第l个到第r个翻转状态(有这条边 -> 没这条边, 没这条边 -> 有这条边 ...

  10. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)

    链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 QingyuQingyu 当 ...

随机推荐

  1. Docker-Compose部署Gitlab以及Gitlab配置SMTP邮件服务

    使用Docker-Compose部署Gitlab 拉取镜像 地址: https://hub.docker.com/r/gitlab/gitlab-ce/tags 拉取到镜像后,使用docker tag ...

  2. 热烈祝贺:薪火数据(https://www.datainside.com.cn 数据中心低代码搭建平台)参加教育博览会取得圆满成功。

  3. AtCoder_abc327

    T1 ab 循环从s[0] 到s[n-2] 判断有无ab相邻 T2 A^A 两层循环枚举就可以了 由于aa会增长的很快,所以当a=16时aa就已经大于\(10^{18}\)了,一定不会T 就这么点数打 ...

  4. Azure - 机器学习企业级服务概述与介绍

    Azure 机器学习 - 为端到端机器学习生命周期使用企业级 AI 服务. 关注TechLead,分享AI全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦 ...

  5. Java并发(十八)----常见线程安全类及实例分析

    1.常见线程安全类 String Integer StringBuffer Random Vector Hashtable java.util.concurrent (JUC)包下的类 这里说它们是线 ...

  6. tomcat服务器报错

    看问题 报错信息里面说 tomcat目录下conf下的aaa.xml报错 根据目录找到aaa.xml发现aaa.xml里面是空的,删除了之后就不报错了 不知道为啥这个就会报错,以前也出现过没有解决,这 ...

  7. Head First Java学习:第八章-接口和抽象类

    第八章:接口和抽象类 深入多态 1.抽象类:有些类不应该被初始化 在类声明前面加上抽象类的关键字,abstract. 防止类被初始化,即不能被"new"创建该类的实例(要求) 还是 ...

  8. 新版本下如何通过外部网络访问wsl

    众所周知,wsl2是windows下的linux子系统,并且采用类似于虚拟机NAT的管理方式.一般情况下,外部网络很难直接访问到wsl上的服务,除非使用端口转发.而现在,微软更新了wsl 2.0.0, ...

  9. redis添加缓存配置类

    redis添加缓存配置类 package com.atguigu.servicebase.config; import com.fasterxml.jackson.annotation.JsonAut ...

  10. Python中的cls语法

      在Python中,cls 是一个用于指代类本身的约定性名称,通常用作类方法(class method)中的第一个参数.cls 类似于 self,它是对类的引用,而不是对实例的引用.cls 通常在类 ...