找一个区间内两个数最大公约数的最大值(24年gdcpc省赛G题)

题目大意就是t组数据,每组一个左右边界l,r,问区间内的两个是xi,yi是区间内max(gcd(xi,yi)),数据范围是1e12.

答案就是找到第一个a*x<b*x(a<b),他们两在l到r之间且x最大,那么x就是答案,可以知道,要使两个数在区间内,那么他们之间的差值要小于min(R-L,[R/2]),[]表示向下取整

看着两种情况,第一种情况,2*k是最后一个能被2整除的数,所以如果2*k不等于R的话那么在2*k右边不可能出现大于等于2*k+2的数,及只有2*k+1,且R不等于2*k,所以R=2*k+1,第二种情况及2*k==R,如果r/2在[l,r]之间,那么k必然是我们要找的最大的gcd,因为根据上面的推断,这个时候a=1,b=2,显然此时x最大.如果k小于l,那么答案必定是小于r-l的这很好判断吧.

那么现在为了让a和b最小,我们来看M,2M,3M,3M表示在L,R区间内最后一个能整除3的,这个时候就有好几种情况了,先分析1.如果3M>2K,那么3M右边必定没有数字,因为在之前分析了,2K右边最多有一个数字,所以这个的3M显然等于R,第二种情况就是3M<2K,如果2K等于R,那么右边没有数字,这种情况下只有K在L左边才会发生,即R-L<K的时候才会发生,否则在2*k的时候就是已经找到答案了,就不会进行到分析3的情况了,为什么不先选择3而去选择2,因为当我们计算最后一个能整除K的数字的时候,使用[R/K]*K,那么对于K*n,和在区间内或者不在区间内的n*k,n*(k-1)....一直到n,他们的最大公约数必然是n,即[R/K],显然[R/K]随着K的增大而减小,所以要找最大的x,就按顺序增大k就好.接下来回到3,刚才我们说到3*m右边有一个数,一种是2*k在3*m右边,这时说明2*k不满足,直接看3*m是否满足即可,第二种是右边不是2*k,这种情况不存在,如果2*k在3*m左边,那就不满足2*k右边至多有一个数的条件了.下一种情况是3*m右边没有数字,那么就不需要证明什么,2*m在范围内,那么答案就是m,第三是3*m右边有两个数,显然2*k=3*m+1,那么由于2*k是最后一个能被2整除,3*m是最后一个能被3整除的数,3*m+2显然最小能被4整除,写个不等式(3*m+2)/4显然小于等于m,在m都是正整数的时候.当然其它情况以此类推.

我们最终能得出的结论是:[L,R]范围内的max(gcd(x,y))是一个[R/k]*(k-1)且在范围内的[R/k],

using ll = long long;
void solve() {ll l, r;std::cin >> l >> r;ll x = std::min(r - l, r / 2);for (; x >= 1; x = r / (r / x + 1)) {if (r - r % x - x >= l) {std::cout << x << '\n';break;}}
}
int main() {int t;std::cin >> t;while (t--) {solve();}return 0;
}

代码解释,x初始化为最大区间,r/x表示能容纳该区间的区间数,+1表示区间数+1,然后再用r/(r/x+1)及表示当相同区间数+1后区间的大小,r-r%x计算的是左边界,去掉r%x以后前面是一个均分的每个区间大小为x的区间,再减去一个x,因为我们要在[l,r]内容纳两个区间,如果它大于等于左边界,就说明找到答案了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/842631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安装】VMware虚拟机安装windows操作系统,VM的相关操作

目录 引出报错&#xff1a;press any key to boot form cd激活调整显示 在VMware上新建虚拟机&#xff0c;并安装Windows1、新建虚拟机2、装载 ISO 镜像3、安装Windows server 20164、开机初始化 虚拟机操作1、虚拟机基本操作2、虚拟机快照3、虚拟机克隆4、VMware Tools 总结 引…

消费增值:国家支持的消费新零售模型

在当下的消费时代&#xff0c;一个全新的概念——消费增值&#xff0c;正逐渐走进大众视野。它不仅仅是一种消费模式&#xff0c;更是一种全新的财富增长途径。那么&#xff0c;消费增值究竟是什么&#xff1f; 首先&#xff0c;消费增值的本质在于将消费行为与投资行为相结合…

大模型日报2024-05-27

大模型日报 2024-05-27 大模型资讯 芝加哥大学研究AI在金融分析中的应用 摘要: 芝加哥大学的研究探索了大型语言模型&#xff08;LLMs&#xff09;在金融分析中的能力。GPT-4等大型语言模型在文本分析、解释和生成方面表现出色。 AI帮助揭示海洋和肠道中病毒的动态 摘要: 病毒在…

无人机技术:倾转旋翼飞行器的关键技术详解

一、总体设计 倾转旋翼飞行器作为一种独特的垂直起降与水平巡航的航空器&#xff0c;其总体设计是关键技术之一。总体设计涵盖了飞行器的整体布局、重量分配、气动性能、机械结构设计等多个方面。在总体设计中&#xff0c;需要充分考虑飞行器的垂直起降、悬停、过渡飞行和水平…

Docker 安装与管理

Docker 是一个开源的应用容器引擎,主要用于在 Linux 和 Windows 中创建、部署和运行应用程序。在本文中,我们将详细介绍如何在 CentOS 7 上安装和管理 Docker。 前提条件 Docker 运行在 CentOS 7 上,需要满足以下条件: 系统为 64 位系统内核版本 3.10 及以上下面是一个示例环…

二分例题(D.负重越野,I.路径规划)

这两天的训练赛都有一道二分的题&#xff0c;但是都没往二分上面想&#xff0c;同样不知道怎么二分。 D. Fast and Fat 思路 二分的关键也就是check函数怎么写了&#xff0c;求队伍最大速度&#xff0c;可以分为速度>mid和<mid两部分&#xff0c;再判断&#xff0c;能不…

流量分析入门

什么是流量分析 通过捕捉网络中流动的数据包&#xff0c;查看里面的数据和协议&#xff0c;流量分析和各种数据的统计来发现网络运行中的问题&#xff0c;在ctf中一般是一个包含流量数据的 PCAP 文件。 [陇剑杯 2021]签到 1.题目问我们正在进行的事什么协议的攻击 2.打开wire…

【ARMv7-A】——WFI(wait for interrupt)

文章目录 WFI基本原理使用场景多任务模型注意事项代码实例linux 内核中的 WFI 指令不使用 WFI 指令使用 WFI 指令WFI WFI 即 Wait for interrupt,常用于低功耗。 WFI (Wait for interrupt) 和 WFE (Wait for event) 是两个让 ARM 核进入 low-power standby 模式的指令,由 A…

【vue与iframe通讯】

vue 与 iframe 通讯 发送数据vue 向 iframe 发送数据iframe 向 vue 发送数据接收信息( vue & iframe 通用) 实现相互通讯通讯流程图实现代码vue 页面iframe页面iframe 内部重定向访问地址,更新 vue 路由 访问跨域代码下载 前言&#xff1a;vue嵌套iframe实现步骤 发送数据…

基于Pytorch框架的深度学习ShufflenetV2神经网络十七种猴子动物识别分类系统源码

第一步&#xff1a;准备数据 17种猴子动物数据&#xff1a; self.class_indict ["白头卷尾猴", "弥猴", "山魈", "松鼠猴", "叶猴", "银色绒猴", "印度乌叶猴", "疣猴", "侏绒"…

做抖音小店不懂这四个“重点”!那就别怪你的店铺,做不长久!

我相信大家做抖音小店&#xff0c;都去抖音刷过知识点&#xff0c;也去浏览器学习过技巧 但在这里&#xff0c;我给大家泼盆冷水 方法再多&#xff01;这四点不搞明白&#xff0c;那你的店铺出几天单&#xff0c;也就再也做不起来了 哪四点&#xff1f;请认真的看下去&#…

WSL2修改CPU核数

参考WSL 中的高级设置配置 | Microsoft Learn 查看LinuxCPU核数 cat /proc/cpuinfo | grep "processor" | wc -l 先关闭所有wsl终端&#xff0c;远程连接开发的IDE也需要关闭&#xff0c;因为工具链开着给你wsl没有完全关闭&#xff0c;在Windows的power shell终端…

django-celery-beat自动调度异步任务

Celery是一个简单、灵活且可靠的分布式系统&#xff0c;专门用于处理大量消息的实时任务调度。它支持使用任务队列的方式在分布的机器、进程、线程上执行任务调度。Celery不仅支持异步任务&#xff08;如发送邮件、文件上传、图像处理等耗时操作&#xff09;&#xff0c;还支持…

Mysql中的常见类型

数值型 INT 大整数类型&#xff0c;占四个字节&#xff0c;范围为-2,147,483,648 到 2,147,483,647&#xff0c;INT类型常用于存储较大的整数&#xff0c;如用户ID、记录编号、计数器等。 TINYINT 在Mysql中&#xff0c;tinyint是一个只占一个字节的无符号的整数类型&#…

2024.05.27学习记录

1、面经复习&#xff1a; 实际工作经验章节 2、代码随想录刷题&#xff1a;动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容

2024甘肃省三支一扶报名流程详细图解

预计报名时间&#xff1a;2024年5月27日9:00至5月31日18&#xff1a;00 2024甘肃省三支一扶报名流程 登录甘肃人力人力资源考试中心&#xff0c;选择网上报名 进入账户登录&#xff0c;首次登录同学请先注册账号。 注册账号&#xff0c;认真填写&#xff0c;仔细核对信息。…

惠海 H6901B升压恒流3.7V 7.4V 12V 24V 30V 36V 48V 60V 80V 100V调光无频闪细腻顺滑

H6901B是一款升压型LED恒流驱动芯片&#xff0c;具有良好稳定性的特点。H6901B的主要特点包括宽输入电压范围&#xff08;2.7V-100V&#xff09;、高工作频率&#xff08;1MHz&#xff09;以及多种保护功能&#xff08;如芯片供电欠压保护、过温保护、软启动等&#xff09;。此…

PIL读取彩色图并使用opencv二值化

PIL读取彩色图&#xff0c;使用opencv二值化 在Python中&#xff0c;您可以使用PIL&#xff08;Pillow&#xff09;库来读取彩色图像&#xff0c;然后将其转换为OpenCV可处理的格式&#xff0c;最后使用OpenCV的函数进行二值化处理。以下是一个示例流程&#xff1a; from PIL…

美颜技术揭秘:美颜SDK与美颜接口的开发实践

一、美颜技术的基本原理 1.1面部检测与特征点识别 面部检测是美颜技术的第一步&#xff0c;通过计算机视觉算法检测图像中的人脸位置。常用的方法有Haar特征、卷积神经网络&#xff08;CNN&#xff09;等。 1.2图像增强与美化 -磨皮 -美白 -眼部增强 -脸型优化 1.3实时处…

yolov8 ultralytics库实现多机多卡DDP训练

参考: https://github.com/ultralytics/ultralytics/issues/6286 ddp训练报错,问题修改: https://blog.csdn.net/weixin_41012399/article/details/134379417 RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported at s…