整除分块(数论分块)
转载自此博客
整除分块:
给定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);
}
是不是贼简单~~
转载于//www.cnblogs.com/mowanying/p/11276425.html
还没有评论,来说两句吧...