CF Round767 Div.2

·   ·   ·   ·

  ·   ·


Problem B

CF1629B - GCD Arrays

给定一个连续的整数数组 $[l, r]$,可以对该数组进行 $k$ 次如下的操作:

  • 从数组中任意选择两个数
  • 将它们从数组中移除
  • 将它们的乘积放回数组中

对于给定的数组来说,有可能在 $k$ 次操作后,得出一个 GCD 大于 1 的数组嘛?

题解

对于一个 GCD 大于 1 的数组来说,整个数组的 GCD 必然是数组中所有的数共同含有的一个质因子,所以,我们需要找出数组中最多数含有的质因子,并将剩下的数变成拥有这个质因子的数即可

显而易见,在题目给定的数组类型中,拥有质因子 2 的数一定是最多的( 1 不是质数),所以我们只用求出数组中奇数的个数,就能知道要达成要求所需的最小操作次数

数组中的奇数个数为 $(r−l+1)−(r/2−(l−1)/2)$,所以我们只用将这个数和 $k$ 进行比较即可得出答案

我们还需要注意一种特殊情况,也就是当 $l = r$ 的时候,只有当 $l = r = 1$ 时不满足情况,其余皆满足