zoukankan      html  css  js  c++  java
  • 整除分块

    整除分块

    问题提出

    最近在学习莫比乌斯反演,发现基本上所有有关莫比乌斯反演的题目,都会涉及一个小知识点整除分块

    所以在学习毒瘤莫比乌斯之前学习一下整除分块是很有必要的

    然后我们就先来学习这个问题

    我们来讨论一个有趣的问题

    (sum_{i=1}^N lfloor frac Ni floor ,N leq 10^{12})

    问题解决

    显然不能直接做

    经过一番冷静推理暴力打表,我们发现以下性质:

    ·1.(large lfloor frac Ni floor)向下取整最多只有(2sqrt{N})种取值

    证明:对于(ile sqrt{N}),只有(sqrt{N})种,对于(i>sqrt{N},large{frac Ni}<sqrt{N}),也只有(sqrt {N})种取值,共计(2 sqrt{N})种取值

    ·2.设(large lfloor frac N{i'} floor)(large lfloor frac N{i} floor)相等,则(i')的最大值(max(i')= large left lfloor frac N{left lfloor frac Ni ight floor } ight floor)

    证明:设(large{ lfloor frac Ni floor}=k),于是可以写成(ki+p=N,1le p<i)的形式,若有$$large{lfloor frac N{i+d} floor}=k$$,于是$$k(i+d)+p'=N$$ ,即有(p'=p-kd),则(能得到的最大值为d能得到的最大值为 large lfloor frac pk floor)

    于是有

    (egin{aligned}i'&=i+d_{max} \ &=i+lfloor frac pk floor \&=i+left lfloor frac {N ;mod; i}{lfloor frac Ni floor} ight floor \ &=i+left lfloor frac {N-lfloor frac Ni floor i}{lfloor frac Ni floor} ight floor \ &=left lfloor i + frac {N-lfloor frac Ni floor i}{lfloor frac Ni floor} ight floor \ &=left lfloor frac{lfloor frac Ni floor i}{lfloor frac Ni floor} + frac {N-lfloor frac Ni floor i}{lfloor frac Ni floor} ight floor \ &=left lfloor frac N{lfloor frac Ni floor} ight floor quad quadBoxend{aligned})

    然后,设两个指针L,R,L的初始值为1,每次令(large R=left lfloor frac N{lfloor frac NL floor} ight floor)(large (R-L+1)cdot lfloor frac NL floor)由于(large lfloor frac NL floor)只有(2 sqrt{N})种取值,且单调递减,这最多只有(2 sqrt{N})个取值不同的,时间复杂度(O(sqrt{N})).

    for(int l=1,r;l<=n;l=r+1)
    {
        r=n/(n/l);
        ans+=(r-l+1)*(n/l);
    }
    

    与其他函数的联系

    • 有时候,可能推出来的式子不一定就是一个很裸的整除分块,可能会与某些积性函数相乘,如:μ,φ...... 这时候,我们就需要对这些函数统计一个前缀和。因为,每当我们使用整除分块跳过一个区间的时候,其所对应的函数值也跳过了一个区间。所以此时,就需要乘上那一个区间的函数值。
    • (当然,如果当出题人想要考考你的数论能力的话,这时就不是统计前缀和这么简单了。可能(O(N))线筛都会TLE,那么我们就需要杜教筛了)
    • (PS:关于杜教筛的内容,我没过多久就会写,那时候再填坑吧!)
  • 相关阅读:
    Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)
    Educational Codeforces Round 79 (Rated for Div. 2)
    Codeforces Global Round 6
    Codeforces Round #608 (Div. 2)
    Codeforces Round #606 (Div. 2)
    Codeforces Round #603 (Div. 2)
    Educational Codeforces Round 77 (Rated for Div. 2)
    洛谷 P3805 【模板】manacher算法
    HDU 1671 Phone List [字典树]
    2019牛客暑期多校训练营(第一场)E.ABBA
  • 原文地址:https://www.cnblogs.com/My-snowing/p/10390340.html
Copyright © 2011-2022 走看看