牛客7606D - 变换

题意

  • 给出一个长度为 n(n106)n(n\leq 10^6) 的序列 ai(1ai106)a_i(1\leq a_i\leq 10^6),你每次操作可以选择一个数字不变,其他数字乘以任意一个质数
  • 求出:为使序列中所有数字两两相同,至少需要的操作次数

思路

  • 最终序列中所有数字两两相同,那么这个数字是什么?
    • 假设这个数字是 AA,那么 AA 可以写成 p1x1×p2x2××pkxkp_1^{x_1}\times p_2^{x_2}\times \dots \times p_k^{x_k} 的形式,设 P1={p1,p2,pk}P_1=\lbrace p_1,p_2,\dots p_k\rbrace
    • 对于i[1,n]i \in [1,n],将每个 aia_i 质因数分解,将质因数放入集合 P2P_2 中(一边放入一边去重,P2P_2 中无重复元素)
    • 那么,P1=P2P_1 = P_2,也就是说,数字 AA 的每个质因子,都能由至少一个 aia_i 经分解质因子得到
  • 操作 “选择一个数字不变,其他数字乘以任意一个质数”,相当于
  • 对于每个集合 P2P_2 中的质因子 pp,用 f(x)f(x) 表示:满足 pp 出现了至少 xx 次的 aia_i 的数量,形式化地,f(x)=i=1n[aipx]f(x)=\sum_{i=1}^{n}[a_i | p^x],此时 f(x)f(x) 对答案的贡献是 f(x)modnf(x)\mod n