题目大意:
输出[l,r]直接所有数的因子和
l<=r<=2e12
题目解法:
不要问我为什么要给这种简单题写题解因为我之前还真不会这玩意儿
- r-l<=1e6
这种情况下可以从l循环到r因式分解求解。
注意到我们只需要筛出sqrt(r)的素数表即可。对于一个数n,如果除掉所有1~sqrt(n)的素数后仍有剩余那么剩余部分一定为质数,答案×2即可。
注意在因式分解是我们不应该对于每个数拿所有素数去试这样的复杂度是假的。我们应该在筛素数的时候处理好每个数的质因数,即如果有素数就把该素数在区间内的所有倍数标记上这个因数。这样的复杂度显然只有一个log的。规避了之前那种算法许多冗杂的判断。
- r-l无限制
尝试用solve(r)-solve(l)作为答案。
显然
然后就可以快乐地整除分块(把所有n/i相同的i放在一起算)啦!可以在根号级别的复杂度算完。