HGOI 20191031am 题解

﹥>﹥吖頭↗ 提交于 2019-12-03 02:25:18

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})$

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!