Description
给定 n ,求下式的值
i=1∏nj=1∏ngcd(i,j)lcm(i,j)
Solution
分享两种做法。
第一种是类似于 ∑ 时的做法:
i=1∏nj=1∏ngcd(i,j)lcm(i,j)=i=1∏nj=1∏nijd=1∏nd−2[gcd(i,j)=d]=(n!)2nd=1∏nd−2i=1∑nj=1∑n[gcd(i,j)=d]
指数上的东西可以转化成 φ 。复杂度 O(nlog2n) 。
第二种做法需要用到一个奇怪形式的函数的性质
i=1∏nj=1∏ngcd(i,j)lcm(i,j)=i=1∏nj=1∏nij(d=1∏nd[gcd(i,j)=d])−2=(n!)2n(d=1∏ndt=1∑nμ(t)(tdn)2)−2=(n!)2n(T=1∏n(d∣T∏(dμ(dT))(Tn)2)−2
注意一下内层的东西
f(T)=d∣T∏dμ(dT)
这个函数是可以欧拉筛筛出来的。
一般拿到一个函数时,我们先证明其是积性函数,再通过 质数 → 质数幂 → 合数 的顺序逐步分析怎么筛。当然,如果函数不是积性函数,但很有特点,也可以筛。
先考虑质数:f(p)=p 。
再考虑质数幂:f(pk)=pk×pk−11=p 。
考虑合数:由于幂次中只有莫比乌斯函数,我们考虑 分开计算每个质数的贡献 。假设合数中有质数 pk ,那么贡献一定是 (pk)C×(pk−11)C ,其中 C 是其他质因子对于 pk 的贡献。考虑除了 p 之外有 k 个质因数,那么有
C=i=0∑k(−1)k(ik)=[k=0]
所以每个质数的贡献都是 1 ,所有合数的函数值恒为 1 。
于是这个式子我们也可以快速算,复杂度 O(nlog2n)。