给一个长度为$n$的数组,每个数最多有7个因数,从中取$len$个数,使他们的乘积是平方数,求最小$len$。
考虑到因数格式。所以$a_i=p^x*q^y$或者$a_i=p^x$
且$q^x=q^{x\%2}$,如果是平方数那么就是一定是$(p\times q)\times (q\times z)\times (z\times p),(1\times p)\times (p\times q)\times (q\times 1)$.那么将$p-q$连接起来或者$1-p$连接起来。当构成一个环就可以构成平方数。求一个最小环($n^2$),又因为环里一定存在$p\leq\sqrt {a_i}$。只需要搜索$\sqrt {a_i}$个点。
时间复杂度$O(MAX(a_i))$
代码
1 |
|