题目大意
给出一个长度为 n n n 的序列 a a a,以及 q q q 次询问
每次询问给出 l , r l,r l,r,问最少需要把区间 [ l , r ] [l,r] [l,r] 划分成多少段,满足每段内元素的 LCM 等于元素的乘积
这数据范围,这询问方式,一看就是DS题
首先,我们考虑 LCM 的性质。如果一段区间内的数的 LCM 等于所有元素之积,那么这个区间中的数一定两两互质。
我们设 n x t i nxt_i nxti 表示 i i i 后面第一个与 a i a_i ai 不互质的数的位置
同时,记 f i f_i fi 为以 i i i 为左端点时,满足区间内数两两互质的最远右端点 + 1 +1 +1,也就是下一个互质区间的左端点
我们考虑从后往前计算 n x t i nxt_i nxti
对于每个质数 p k p_k pk,我们维护 c k c_k ck 表示 p k p_k pk 的倍数出现的最近位置
那么, n x t i nxt_i nx