转载自此博客
整除分块:
给定n,求(Σd=1n ⌊n /d⌋)%998244353,n<=1e14
直接枚举会爆
考虑优化:
我们发现,⌊n/d⌋是有可能等于⌊n/(d+1)⌋的
那我们为什么要重复算呢? 直接加就好了!!
那也就是说,对于一个i,我们要找到一个j,使得⌊n/i⌋=⌊n/(i+1)⌋=⌊n/(i+2)⌋=……=⌊n/j⌋!=n/(j+1)
那么,我们得出 j=⌊n/(⌊n/i⌋)⌋
于是就可以优化了,复杂度是O(sqrt(n))
代码实现:
for(int i=1,j;i<=n;i=j+1) { j=n/(n/i); ans+=(j-i+1)*(n/i); }
是不是贼简单~~