DestinHistoire

 

BZOJ-2705 [SDOI2012]Longge的问题(欧拉函数+积性函数的性质)

题目描述

  求:

\[\sum_{i=1}^{n}\gcd(i,n) \]

  其中 \(1<n\leq 2^{32}\)

分析

  考虑枚举 \(n\) 的因子 \(d\)

\[\begin{aligned}&\sum_{i=1}^{n}\gcd(i,n)\\ =&\sum_{d|n}\sum_{i=1}^{n}[\gcd(i,n)=d]·d\\ =&\sum_{d|n}\sum_{\frac{i}{d}=1}^{\frac{n}{d}}[\gcd(\frac{i}{d},\frac{n}{d})=1]·d\\ =&\sum_{d|n}\varphi\big(\frac{n}{d}\big)d \end{aligned} \]

  构造 \(f(n)=n,g(n)=\varphi(n),h(n)=\displaystyle\sum_{d|n}\varphi\big(\frac{n}{d}\big)d\)

  显然 \(f\ast g=h\)\(f,g\) 都是积性函数,则 \(h\) 也是积性函数,则 \(h(n)=h(p_1^{c_1})·h(p_2^{c_2})\cdots h(p_{k}^{c_k})\)

  考虑如何计算 \(h(p^k)\)

\[\begin{aligned}&h(p^k)\\ =&\sum_{i=0}^{k}p^{i}\varphi(p^{k-i})\\ =&\varphi(p^k)+p·\varphi(p^{k-1}) +p^2·\varphi(p^{k-2})+\cdots+p^{k}\\ =&p^{k}-p^{k-1}+p(p^{k-1}-p^{k-2})+p^2(p^{k-2}-p^{k-3})+\cdots+p^{k-1}(p-1)+p^k)\\ =&k(p^k-p^{k-1})+p^{k}\\ =&(k+1)p^{k}-kp^{k-1} \end{aligned} \]

  把 \(n\) 唯一分解,对每个质因子求 \(h(p_i^{c_i})\),乘起来即可,在唯一分解的同时乘上对应质因子的答案,预处理最后快速幂可能会超时。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n;
    while(cin>>n)
    {
        long long temp=n,ans=1;
        for(long long i=2;i*i<=n;i++)
        {
            long long p=1,num=0;
            while(temp%i==0)
            {
                temp=temp/i;
                p=p*i;
                num++;
            }
            ans=ans*((num+1)*p-num*p/i);
        }
        if(temp!=1)
            ans=ans*(2*temp-1);
        cout<<ans<<endl;
    }
    return 0;
}

posted on 2020-11-09 17:13  DestinHistoire  阅读(99)  评论(0)    收藏  举报

导航