【洛谷】P8792 [蓝桥杯 2022 国 A] 最大公约数 的题解

文章讲述了如何解决一道关于最大公约数的竞赛题目,当数组中存在1时可以直接平铺,否则需要找到最短的子数组使其gcd为1,利用线段树和二分查找来优化求解过程。

【洛谷】P8792 [蓝桥杯 2022 国 A] 最大公约数 的题解

题目传送门

思路

首先先考虑数组中是否存在 1 1 1,如果数组中存在 1 1 1,那么我们可以直接进行平铺把全部变成 1 1 1,假设 1 1 1 的个数为 x x x 个,那么最终的答案应该是 n − x n-x nx 次。

如果原数组中不存在 1 1 1,该如何呢?那么我们应该想方法变出一个 1 1 1,然后使用这个 1 1 1 进行平推将数组全部变成 1 1 1。关于 gcd ⁡ \gcd gcd,我们首先要明白——如果一段子数组的的 gcd ⁡ \gcd gcd 1 1 1,那么原数组的 gcd ⁡ \gcd gcd 也一定为 1 1 1。 这也非常容易理解,如果存在一个数组的 gcd ⁡ \gcd gcd 1 1 1,那么这个数组无论再加上任何正整数, gcd ⁡ \gcd gcd 也永远是 1 1 1,因为 1 1 1 和任何数的 gcd ⁡ \gcd gcd 都是 1 1 1

题意要求最少次数,那么在没有 1 1 1 的情况下,我们需要使用最少的步数获得 1 1 1 ,那么就是我们需要在数组中找到最短的子数组,使得它们的 gcd ⁡ \gcd gcd 1 1 1。所以我们会涉及道查询区间 gcd ⁡ \gcd

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值