感情已那么深 叫我怎么能放手

KaisuoShutong

2024-11-18 12:19:12

Solution

CF2029E Common Generator

题目描述

称一次操作为,对一个数 x_0 加上其任意大于 1 的因数得到 x_1

若某数 x 做任意次操作可以得到数 y,则称 x 生成了 y

现给定 n 个不同的数 a_i,求是否存在一个 x\gt 1 使得 x 可以生成所有的 a_i。无解输出 -1

### 解法 显然一个质数只能被其自身生成,而任意合数均可被 $2$ 生成。 那么分类讨论,如果存在两个以上的质数,一定无解; 如果存在一个质数,则需判断其能否生成所有数; 如果不存在质数,$2$ 一定是一个合法解。 下面阐释如何判断某质数 $p$ 能否生成数 $x$。 该质数的第一步只能是 $p\to 2p$,则要求 $x\ge 2p$。此时 $2p$ 已然可以生成所有比它大的偶数。那么若 $x$ 为一个偶数,结束。 否则,考虑最大的可以生成 $x$ 的数。显然其为 $x-p_x$,其中 $p_x$ 为 $x$ 最大的质因数。容易发现这个数一定为一个偶数。因此此时只需 $2p\le x-p_x$ 即可。 由以上讨论,正确性是容易证明的。 时间复杂度 $O(n+V)$。