数论与线性代数——整除分块【数论分块】的【运用】【思考】【讲解】【证明(作者自己证的QWQ)】
文章目录
- 整除分块的思考与运用
- 整除分块的时间复杂度证明 & 分块数量
- 整除分块的公式 & 公式证明
- 公式证明
- 代码code↓
整除分块的思考与运用
整除分块
是为了解决一个整数求和
问题
题目的问题为: ∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^{n} \left \lfloor \frac{n}{i} \right \rfloor i=1∑n⌊in⌋
求出上述式子
的值为多少?
上述问题
等同于 c o d e code code↓
int sum=0;
for(int i=1;i<=n;i++) sum+=n/i;//int是整除类型,所以可以直接整除
return sum;
注意事项:
⌊ x ⌋ \left \lfloor x \right \rfloor ⌊x⌋代表不大于 x x x 的最大整数
,也可以成为向下取整
我们不难看出,如果我们直接按题意暴力模拟
,则时间复杂度为 O ( n ) O(n) O(n),如果 n n n 比较大就会超时(TLE警告QWQ)
而如果我们将 ⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋ ( 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n) 的值输出一下
,就会发现其中有许多值是重复的
输出 ⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋值的 c o d e code code↓
for(int i=1;i<=n;i++) cout<<n/i<<endl;
我们可以举例来看一下:
我们令 n = 8 n=8 n=8 ,则有
i i i 的值 | i i i = 1 1 1 | i i i = 2 2 2 | i i i = 3 3 3 | i i i = 4 4 4 | i i i = 5 5 5 | i i i = 6 6 6 | i i i = 7 7 7 | i i i = 8 8 8 |
---|---|---|---|---|---|---|---|---|
⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋ 的值 | 8 8 8 | 4 4 4 | 2 2 2 | 2 2 2 | 1 1 1 | 1 1 1 | 1 1 1 | 1 1 1 |
此时我们可以明显的看出 ⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋ 的值被明显的分成了几个块
,每个块中的块值相同
分块 | [ 1 , 1 ] [1,1] [1,1] | [ 2 , 2 ] [2,2] [2,2] | [ 3 , 4 ] [3,4] [3,4] | [ 5 , 8 ] [5,8] [5,8] |
---|---|---|---|---|
块值 | 8 8 8 | 4 4 4 | 2 2 2 | 1 1 1 |
整除分块的时间复杂度证明 & 分块数量
总共需要分少于 2 n 2 \sqrt{n} 2n种块,证明如下:
i ≤ n i \leq n i≤n 时, n i \frac{n}{i} in 的值有 { n 1 , n 2 , n 3 . . . n n } \left \{ \frac{n}{1} ,\frac{n}{2},\frac{n}{3} ...\frac{n}{\sqrt{n} }\right \} {1n,2n,3n...nn}, n i ≥ n \frac{n}{i} \ge \sqrt{n} in≥n,共 n \sqrt{n} n 个,此时 ⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋ 有 n \sqrt{n} n 种取值
i ≥ n i \ge n i≥n 时,有 n i ≤ n \frac{n}{i} \le \sqrt{n} in≤n,此时 ⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋ 也有 n \sqrt{n} n 种取值
两者相加,共 2 n 2 \sqrt{n} 2n种,所以整除分块的数量为 O ( n ) O(\sqrt{n}) O(n) 种,所以整除分块的时间复杂度为 O ( n ) O(\sqrt{n}) O(n)
整除分块的公式 & 公式证明
结论: R = n ⌊ n L ⌋ R=\frac{n}{\left \lfloor \frac{n}{L} \right \rfloor} R=⌊Ln⌋n
每个块中的元素个数为: ( R − L + 1 ) (R-L+1) (R−L+1)
每个块中元素的 ⌊ n i ⌋ \left \lfloor \frac{n}{i} \right \rfloor ⌊in⌋ 值为 ⌊ n L ⌋ \left \lfloor \frac{n}{L} \right \rfloor ⌊Ln⌋
每个块中的和为 a n s = ( R − L + 1 ) × ⌊ n L ⌋ ans=(R-L+1) \times \left \lfloor \frac{n}{L} \right \rfloor ans=(R−L+1)×⌊Ln⌋
公式证明
整除分块出现在能被 n n n 完全整除的数之后,到下一个能被 n n n 整除的数之间
令:当前能被 n n n 整除的数为 x x x,下一个能被 n n n 整除的数为 y y y
则有,整除分块的区间为 [ ( x + 1 ) ∼ y ] [(x+1) \sim y] [(x+1)∼y]
令: L = x + 1 L=x+1 L=x+1, R = y R=y R=y, v a l u e value value为分块区间的值,则有,
v a l u e = ⌊ n x + 1 ⌋ = ⌊ n L ⌋ value =\left \lfloor \frac{n}{x+1} \right \rfloor=\left \lfloor \frac{n}{L} \right \rfloor value=⌊x+1n⌋=⌊Ln⌋
因为, y y y 能被 n n n 完全整除(PS:余数为 0 0 0)
所以, ⌊ n y ⌋ = n y \left \lfloor \frac{n}{y} \right \rfloor= \frac{n}{y} ⌊yn⌋=yn,且, n y = v a l u e \frac{n}{y}=value yn=value,则有,
n y = v a l u e \frac{n}{y}=value yn=value y = n v a l u e y= \frac{n}{value} y=valuen
将 v a l u e = ⌊ n x + 1 ⌋ value =\left \lfloor \frac{n}{x+1} \right \rfloor value=⌊x+1n⌋ 代入原式得:
y = n ⌊ n x + 1 ⌋ y= \frac{n}{\left \lfloor \frac{n}{x+1} \right \rfloor} y=⌊x+1n⌋n
我们将 L = x + 1 L=x+1 L=x+1, R = y R=y R=y 代入原式得:
R = n ⌊ n L ⌋ R= \frac{n}{\left \lfloor \frac{n}{L} \right \rfloor} R=⌊Ln⌋n
因为
⌊ n L ⌋ = ⌊ n R ⌋ \left \lfloor \frac{n}{L} \right \rfloor=\left \lfloor \frac{n}{R} \right \rfloor ⌊Ln⌋=⌊Rn⌋
且因为 ⌊ n R ⌋ = n R \left \lfloor \frac{n}{R} \right \rfloor= \frac{n}{R} ⌊Rn⌋=Rn
因为 ( n / R ) (n/R) (n/R) 能被 n n n 完全整除
所以可以保证 n n n 能完全整除 ⌊ n L ⌋ \left \lfloor \frac{n}{L} \right \rfloor ⌊Ln⌋
所以我们可以得证:
⌊ n ⌊ n L ⌋ ⌋ = n ⌊ n L ⌋ {\left \lfloor \frac{n}{{\left \lfloor \frac{n}{L} \right \rfloor}} \right \rfloor}= \frac{n}{\left \lfloor \frac{n}{L} \right \rfloor} ⌊⌊Ln⌋n⌋=⌊Ln⌋n
证明完毕
细节详解:
在 i n t , l o n g l o n g int,long long int,longlong 等整数类型中,可以直接进行整除,所以上面的得证等同于 R = ( n / ( n / L ) ) R=(n/(n/L)) R=(n/(n/L))
代码code↓
#include <bits/stdc++.h>
using namespace std;
long long n,L,R,ans=0;
int main(){cin>>n;for(L=1;L<=n;L=R+1){//L=R+1是代表进入下一个块R=n/(n/L);//公式ans+=(R-L+1)*(n/L);//求和cout<<L<<"~"<<R<<":"<<n/R<<" "<<n/L<<endl;//打印分块情况}cout<<ans;//打印和return 0;
}
当 n = 8 n=8 n=8 时的运行结果↓:
相关文章:
数论与线性代数——整除分块【数论分块】的【运用】【思考】【讲解】【证明(作者自己证的QWQ)】
文章目录 整除分块的思考与运用整除分块的时间复杂度证明 & 分块数量整除分块的公式 & 公式证明公式证明 代码code↓ 整除分块的思考与运用 整除分块是为了解决一个整数求和问题 题目的问题为: ∑ i 1 n ⌊ n i ⌋ \sum_{i1}^{n} \left \lfloor \frac{n}{…...
Linux系统下安装jdk与tomcat【linux】
一、yum介绍 linux下的jdk安装以及环境配置,有两种常用方法: 1.使用yum一键安装。 2.手动安装,在Oracle官网下载好需要的jdk版本,上传解压并配置环境。 这里介绍第一种方法,在此之前简单了解下yum。 yum 介绍 yum&…...
matlab实现决策树可视化——信息增益、C4.5、基尼指数
代码:https://download.csdn.net/download/boyas/89074326...
如何使用Python进行网络编程和套接字通信?
如何使用Python进行网络编程和套接字通信? Python作为一种通用编程语言,具有强大的网络编程能力。它提供了丰富的库和工具,使得开发者可以轻松地实现网络编程和套接字通信。下面将详细介绍如何使用Python进行网络编程和套接字通信。 一、网…...
nodeJs 实现视频的转换(超详细教程)
前段时间拿到一个视频是4k的,没法播放,于是通过 node.js 和 ffmpeg 实现了视频的转换。在win10 系统下实现。 所需工具 node 16.19 直接安装 ffmpeg-5.1.1-essentials_build 解压后重名 ffmpeg 放到C盘 然后配置下环境变量 Git-2.42.0.2-64-bit 直接…...
Transformer - model architecture
Transformer - model architecture flyfish Transformer总体架构可分为四个部分: 输⼊部分 输出部分 编码器部分 解码器部分 输入部分 输出部分 输⼊部分包含: 源嵌⼊层和位置编码 ⽬标嵌⼊层和位置编码 输出部分包含: 线性层 softmax处理器 左侧编码器部分和右侧解码器部…...
Zookeeper学习一
初识 Zookeeper Zookeeper 是 Apache Hadoop 项目下的一个子项目,是一个树形目录服务(B树)。 Zookeeper 翻译过来就是 动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、Pig(小 猪)的管理员。简称zk …...
SAR教程系列7——在cadence中用Spectrum工具FFT仿真ADC的ENOB、SNR等动态性能指标
首先在仿真之前,你得有一个ADC。然后是思考如何仿真的问题,如何加激励,如何使用相关工具查看仿真结果。假定你有一个可以仿真的ADC,大致经过下列步骤可以得到ADC的相关动态性能指标。 第一步:在ADC后面接一个理想的DA…...
攻防世界:mfw[WriteUP]
根据题目提示考虑是git库泄露 这里在地址栏后加.git也可以验证是git库泄露 使用GitHack工具对git库进行恢复重建 在templates目录下存在flag.php文件,但里面并没有flag 有内容的只有主目录下的index.php index.php源码: <?phpif (isset($_GET[page…...
mysq性能优化-my.cnf配置文件参数调整
MySQL 优化配置文件(my.cnf 或 my.ini)是调整 MySQL 服务器性能的重要手段之一。以下是一些常见的场景,可以通过调整配置文件参数值来优化 MySQL: 1. **提高并发处理能力**: - innodb_buffer_pool_size:增…...
ddres( ) 组站星双差方程和设计矩阵
1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值,单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…...
【OpenCV】图像像素的遍历
1 前言 介绍两种遍历像素的方法(非指针、指针)。注意:.at() .ptr()的作用、用法。相关API: Mat对象.ptr() Mat对象.at() 2 代码及内容 #include "iostream" #include "opencv2/opencv.hpp"using namespac…...
(超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
当构建高可用的网络应用时,负载均衡是至关重要的技术之一。Nginx 是一个强大的开源反向代理服务器,提供了丰富的负载均衡功能,包括负载均衡算法和健康检查。在本篇博客中,我们将讨论如何使用 Nginx 进行负载均衡,并结合…...
华为OD面试手撕算法-合并排序数组
题目描述 本题是leetcode一道简单题:合并两个有序数组,但是对于时间和空间复杂度面试官明确给出了限制。 // 给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。 // 初始化…...
云智慧发布对象关系型数据库CloudPanguDB,打破传统技术壁垒
近日,云智慧推出关系型数据库CloudPanguDB(中文名称:盘古数据库),旨在通过高兼容性能和创新技术架构,降低企业项目整体运营成本。 无论是处理海量复杂数据,还是构建清晰有序的数据结构关系&…...
6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)
90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接:https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f RTC 使用 简介 AIO-3399J 开发板上有 一个集成于 RK808 上的RTC(Real Time Clock),主要功能有时钟,…...
VUE——概述
vue是前端框架,基于MVVM思想。 引入 从官网下载vue文件 <script src"js/vue.js"></script> 定义vue对象 new Vue({el: "#x",//vue接管区域,#表示选择器,x是id名字data: {message: "y"} })案例…...
合宙4G模块Air724UG调试过程(短信发送、上传数据到华为云IOT)
合宙Air724UG-4G模块AT指令调试接线演示 一、前言 上海合宙Air724UG模块是一款高性能的4G Cat.1通信模组(全网通模块,支持移动、联通、电信,支持短信和网络通信),为开发者提供了丰富的接口和开发方式。 在本文中,将详述调试与集成该模块的关键步骤: (1)从基础硬件配…...
【项目新功能开发篇】需求分析和开发设计
作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是࿰…...
CentOS 7 下离线安装RabbitMQ教程
CentOS 7 下安装RabbitMQ教程一、做准备(VMWare 虚拟机上的 CentOS 7 镜像 上安装的) (1)准备RabbitMQ的安装包(rabbitmq-server-3.8.5-1.el7.noarch)下载地址mq https://github.com/rabbitmq/rabbitmq-se…...
【Servlet】session保存作用域
session保存作用域:一次会话范围都有效 Java的服务器端,有一块内存专门存储在session保存作用域的数据。 session保存作用域是和具体的某一个session对应的。 常用API: void session.setAttribute(k, v)Object session.getAttrivute(k) —…...
企业周年庆3d云展厅促进了客企间交流与互动
在数字化浪潮席卷而来的今天,传统的展示方式已难以满足现代人对信息获取与体验的高标准需求。为此,一种革命性的展示方式——线上3D虚拟展厅应运而生,以其独特的魅力逐渐引领展示方式的革新。 线上3D虚拟展厅开发,不仅为参与者带来…...
Android Studio学习5——布局layout与视图view
wrap_content,内容有多大,就有多宽(包裹) 布局 padding 边框与它自身的内容 margin 控件与控件之间...
设计模式(15):迭代器模式
介绍 提供一中可以遍历聚合对象的方式。又称为: 游标cursor模式 迭代器模式角色 抽象聚合类(Aggregate):提供了聚合相关的方法,并提供获取迭代器的方法;具体集合类(ConcreteAggregate):实现了抽象聚合类;抽象迭代器(Iterator):…...
前端内部技术分享---前端组件之表格组件的封装与使用(Vue3)
业务背景 在我们接触的项目中,PC端的项目中基本上百分之60或以上,都会用到表格,我们最常用的 就是element-plus 组件库,相信大家都对el-table 都比较熟悉了,但是在许许多多大同小异的界面中,每次都要写很多…...
【一】Mac 本地部署大模型
盘古开天辟地开始 # 安装brew/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"(echo; echo eval "$(/opt/homebrew/bin/brew shellenv)") >> /Users/wangxin52/.zprofileeval "$(/opt/homeb…...
vue实现相机拍摄,可录视频、拍照片、前置后置切换(简单小demo)
内容比较简单,不做过多赘述,只做分享,测试demo,功能有些缺陷,希望路过的大佬多多指正 /(*/ω\*) <script setup> import { showToast, showSuccessToast, showFailToast, showLoadingToast } from …...
【项目】牛马点评 问题汇总
如果一个人换很多个不同电话号发验证码会怎样 项目里没实现,如果让我做的话,我会获得用户的ip地址,然后存到redis里,设置个ttl比如1分钟,每次请求过来后就先看看redis里有没有这个ip,有的话就不发验证码。…...
使用 Docker Compose 部署邮件服务器
使用 Docker Compose 部署邮件服务器 很多时候为了方便, 我们都直接使用第三方邮箱进行收发邮件。 但第三方邮箱有些要求定期修改密码,有些限制发邮箱的次数, 对于一些个人和企业来说, 有自己的域名和服务器为什么不自己搭建一个邮…...
FastAPI+React全栈开发21 探索React路由器和其他好东西
Chapter04 Setting Up a React Workflow 21 Exploring React Router and other goodies FastAPIReact全栈开发21 探索React路由器和其他好东西 So far, we have only created a couple of single-page apps that are really single pages, we haven’t touched some advance…...
网站百度权重怎么提升/seo优化技术培训中心
上篇文章中我们提到了代价函数J(θ)J(\theta)J(θ),并期望使它最小化,那代价函数长什么样子呢? 接下来,我们将给大家一个直观的感受,看看参数θ\thetaθ取不同值时,J(θ)J(\theta)J(θ)的几何呈现 我们可以…...
网站开发时间/营销渠道方案
直接一点上图(使用的是JDK1.7的源码):Object类总共13个方法 1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。 主要是JAVA里除了8种基本类…...
上海做什么工作最赚钱/关键词排名优化流程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼全国计算机二级考试大题把题目给定程序删除了,正确运行,这样会不会给分?50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供…...
如何建淘客网站/网站制作推广
打开idea的Terminal,输入 npm install -g webpack webpack-cli...
建设网站翻译/品牌运营管理公司
移动H5前端性能优化 一、概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s(2.71Mb/s),所以首屏资源不应超过1014KB 5. Mobile侧因手机配置…...
直播网站 建设/seo是什么意思职业
我认为,下一代互联网软件将建立在Web service(也就是"云")的基础上。 我把学习笔记和学习心得,放到网志上,欢迎指正。 今天先写一个最基本的问题,Web service到底是什么? 一、Web ser…...