5.16 (数论)E. Zeldain Garden解题报告

题目大意:
输入n,m , 计算[n,m]范围内的每个数的因子个数的总和。

数据范围n,m在1e12左右。

区间这么大,处理方式就是对区间端点的维护。
设置一个函数R(N)来计算[1,x]范围内的每个数的因子个数的总和,分别计算出R(m)和R(n-1),二者一减,便得到题目需要的n~m区间的了。

再来处理一下时间复杂度,大数通常的处理思路就是计算到sqrt为止,复杂度:O(√n)。

思考过程:
小于sqrtN的因子在所有数中有多少:∑N/i (i=1,…,sqrtN)
大于sqrtN的因子在所有数中有多少: ∑N/i (i=1,…,sqrtN)
这里有重复!
“因子对”里的数都小于sqrtN的那些因子其实被重复加了一遍
也就是多加了Q*Q个因子(可以理解以组合(?,?)的思路来理解)

所以R(N)=2*∑N/i (i=1,…,sqrtN) - Q^2

你可能感兴趣的:(5.16 (数论)E. Zeldain Garden解题报告)