【CF1656H】Equal LCM Subsets

题意

给定集合 AABB,从中选择两个子集 AA,BBA'\subseteq A,B'\subseteq B 满足 lcm(A)=lcm(B)\operatorname{lcm}(A')=\operatorname{lcm}(B')

满足 A,B103,A,B4×1035\lvert A\rvert,\lvert B\rvert\le 10^3,A,B\le 4\times 10^{35}

思路

考虑将数 AiA_i 分解为 j=1kpjαj\prod\limits_{j=1}^{k}{p_j}^{\alpha_j},其中 pprimep\in \operatorname{prime}。如果对于一个 pjp_jαj\alpha_j 大于 BB 中所有的 pjp_jαj\alpha_j,那么 AiA_i 必须被删除,对 BB 也同理。

通过上面的分析显然可以得到在满足一下情况时才会将 AiA_i 删除:

gcdi=1mAxgcd(Ax,Bi)>1\gcd\limits_{i=1}^m \dfrac{A_x}{\gcd(A_x,B_i)}>1

因为需要支持将 BiB_i 进行单点删除,所以可以使用线段树进行快速维护。具体的,线段树维护 Axgcd(Ax,Bi)\dfrac{A_x}{\gcd(A_x,B_i)} 的值,时间复杂度为 O(n2(logW+logn))O(n^2(\log W+\log n))

code