HGOI 20191031am 题解

Problem A Divisors

给出$m$个不同的正整数$a_i$,设数论函数 $f(k) = \sum\limits_{i = 1}^{n} [(\sum\limits_{j = 1}^{m} [i |a_j] )== k]$

其中$a|b$表示$a$是$b$的因数,对于所有$k \in [0,m]$,输出答案。

对于$100\%$的数据满足$n\leq 200 , a_i \leq 10^9$

Solution :

  如果我们已知$\sum\limits_{i = 1}^{m} f(i)$,那么显然$f(0) = n - \sum\limits_{i = 1}^{m} f(i)$。

  考虑到如果$j \in [1,n]$是任意一个$a_i$的因数的时候,它一定被所有$a_i$因数的集合包含。

  因为除去这个集合的其他$[1,n]$的数字,必然对$f(0)$贡献。

  所以,直接对于每个数暴力出它的所有因数,构出这个集合$S$。其中$|S| = 2  m\sum\limits_{i = 1}^{m} \sqrt{a_i}$

  对该集合去重后暴力处理出$f(1) ... f(m)$,那么$f(0) =  n - \sum\limits_{i = 1}^{m} f(i) $可以方便出解。

  总时间复杂度为$O(m^2\sum\limits_{i = 1}^{m} \sqrt{a_i})$

猜你喜欢

转载自www.cnblogs.com/ljc20020730/p/11771412.html