1 条题解

  • 1
    @ 2022-3-15 13:25:24

    同见于我的洛谷博客


    Update

    阅读本篇前,请先阅读 OI wiki 相关章目

    因为笔者 LaTeX\LaTeX 欠佳,若炸了可到博客上去看

    Part 0: 一些记号&约定

    • PP : 质数集
    • M\operatorname M : 这是一个我定义的数论函数,以下会讲到
    • * : 狄卷

    Part 1: 转化问题

    为方便讨论,设 M(x)=i=1xgcd{i,x}\operatorname M(x)=\sum\limits^x_{i=1}\gcd\{i,x\}

    那么问题就转化成了对 M\operatorname M 的性质进行研究,从而快速计算出 M(x)\operatorname M(x) !

    Part 2: 一些引理

    考虑到 gcd\gcd 的特性,易有:

    $$\operatorname M(x)=\sum\limits^x_{i=1}\gcd\{i,x\}\\=\sum\limits_{d\mid x}d\sum\limits^x_{i=1}[\gcd\{i,x\}=d]\\=\sum\limits_{d\mid x}d\sum\limits^{\frac xd}_{i=1}[\gcd\{i,\frac xd\}=1]\\=\sum\limits_{d\mid x}d\varphi(\frac xd)=(\operatorname{id}* \varphi)(x) $$

    即:

    M=idφ\operatorname M=\operatorname{id}* \varphi

    id,φ\because\operatorname{id},\varphi 均积性函数 M\\\therefore\operatorname M为积性函数

    这就意味着,若对 xx 进行质因数分解,则:

    $$\operatorname M(\prod\limits^k_{i=1}p_i^{n_i})=\prod\limits^k_{i=1}\operatorname M(p_i^{n_i})\ \ \ \ (p_i\in P,n_i \in N^+) $$

    故倘能快速计算 M(pn)\operatorname M(p^n),则可以 O(x)O(\sqrt x) 计算原式值!    (pP,nN+)\ \ \ \ (p\in P,n\in N^+)

    但如何快速计算 M(pn)\operatorname M(p^n) 呢?

    显然,

    $$\operatorname M(p^n)=\sum\limits^n_{i=0}p^{n-i}\times\varphi(p^i)\\=p^n+\sum\limits^n_{i=1}p^{n-i}\times\varphi(p^i)\\=p^n+\sum\limits^n_{i=1}p^{n-i}\times((p-1)\times p^{i-1})\\=p^n+\sum\limits^n_{i=1}p^{n-1}\times(p-1)\\=p^n+n\times p^{n-1}\times(p-1)\\=(n+1)p^n-np^{n-1} $$

    于是可以在对 xx 除尽 pp 的同时统计 nnpnp^n ,总复杂度为 O(x)O(\sqrt x)

    Part 3: 核心代码示范 (C++)

    知道你们就想要这个

    mod 表示模数,为 00 时不取模

    AC记录

    typedef T unsigned long long;
    inline T M(T num,T mod)
    {
        T ans=1,k,q;
        for(T i=2;i*i<=num;i++)
            if(!(num%i))
            {
                k=1,q=i,num/=i;
                while(!(num%i))k++,q*=i,num/=i;
                ans*=(k+1)*q-k*(q/i);
                if(mod)ans%=mod;
            }
        if(num^1)
            ans*=(num<<1)-1,ans=mod?(ans%mod):ans;
        return ans;
    }
    

    END

    谢谢观赏!

    • 1

    信息

    ID
    2705
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    (无)
    递交数
    21
    已通过
    15
    上传者