• 洛谷P3935 约数个数定理,整除分块


    题意:

    x x x的唯一分解为 x = p 1 a 1 p 2 a 2 . . . p n a n x=p_{1}^{a_{1}}p_{2}^{a_{2}}...p_{n}^{a_{n}} x=p1a1p2a2...pnan,令 f ( x ) = ( a 1 + 1 ) ( a 2 + 1 ) . . . ( a n + 1 ) f(x)=(a_{1}+1)(a_{2}+1)...(a_{n}+1) f(x)=(a1+1)(a2+1)...(an+1),给出 l , r l,r l,r,求
    ∑ i = l r f ( i ) \sum_{i=l}^{r}f(i) i=lrf(i)

    Solution:

    先补一个结论

    约数个数定理

    x x x的约数个数为 d ( x ) d(x) d(x)

    设唯一分解 x = p 1 a 1 p 2 a 2 . . . p n a n x=p_{1}^{a_{1}}p_{2}^{a_{2}}...p_{n}^{a_{n}} x=p1a1p2a2...pnan,那么每个因子的幂取值为 [ 0 , a i ] [0,a_{i}] [0,ai]

    所以约数就是幂的取值组合个数,即 d ( x ) = ( a 1 + 1 ) ( a 2 + 1 ) . . . ( a n + 1 ) d(x)=(a_{1}+1)(a_{2}+1)...(a_{n}+1) d(x)=(a1+1)(a2+1)...(an+1)

    题目 f ( x ) = d ( x ) f(x)=d(x) f(x)=d(x),容斥即求
    ∑ i = 1 r d ( i ) − ∑ i = 1 l − 1 d ( i ) \sum_{i=1}^{r}d(i)-\sum_{i=1}^{l-1}d(i) i=1rd(i)i=1l1d(i)
    这是两个相同的问题,我们只需要考虑如何求解
    ∑ i = 1 n d ( i ) = ∑ i = 1 n ∑ d ∣ i 1 \sum_{i=1}^{n}d(i)=\sum_{i=1}^{n}\sum_{d|i}1 i=1nd(i)=i=1ndi1
    右式意为,对一个 i i i,找出他的所有因数个数,反过来考虑,我们可以考虑一个数,它存在多少个倍数 ≤ n \leq n n,于是即求
    ∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor i=1nin
    整除分块即可,总复杂度 O ( r ) O(\sqrt{r}) O(r )

    // #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;
    
    using ll=long long;
    const int N=1e5+5,inf=0x3fffffff;
    const long long INF=0x3fffffffffffffff,mod=998244353;
    
    ll f(ll x)
    {
        ll ret=0;
        for(ll l=1,r;l<=x;l=r+1)
        {
            ll tmp=x/l; r=tmp?min(x/tmp,x):x;
            ret=(ret+(r-l+1)%mod*(tmp%mod)%mod)%mod;
        }
        return ret;
    }
    
    int main()
    {
        ll l,r; cin>>l>>r;
        cout<<((f(r)-f(l-1))%mod+mod)%mod;  
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    mysql数据库基本操作中select查询
    Linux修复损坏的文件系统
    反编译正常回编译出现问题自己解决办法
    windows使用小技巧之windows照片查看器无法显示此图片
    el-select 支持多选 搜索远程数据 组件抽取
    Mybatis-Plus入门实践
    【Rust 基础篇】Rust 父trait:扩展和组织trait的继承体系
    创建型:工厂模式-简单工厂
    03、GO语言变量定义、函数
    扬帆起航:许战海方法论日文版正式发布
  • 原文地址:https://blog.csdn.net/stdforces/article/details/127761464