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) 收藏 举报
浙公网安备 33010602011771号