DZY Loves Math VI
求下面表达式的值,对 \(10^9 + 7\) 取模。
\[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \operatorname*{lcm}(i,j)^{\gcd(i,j)}
\]
\(1 \leq n,m \leq 5 \times 10^5\)。
\[\begin{aligned}
& \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \operatorname*{lcm}(i,j)^{\gcd(i,j)} \\
= & \sum\limits_{d=1}^{\min(n,m)} \sum\limits_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} (d \times i \times j)^d [\gcd(i,j)=1] \\
= & \sum\limits_{d=1}^{\min(n,m)} d^d \sum\limits_{i=1}^{\lfloor \frac{n}{d} \rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} i^d \times j^d \times \sum\limits_{e \mid \gcd(i,j)} \mu(e) \\
= & \sum\limits_{d=1}^{\min(n,m)} d^d \sum\limits_{e=1}^{\lfloor \frac{\min(n,m)}{d} \rfloor} \mu(e) \times e^{2d} \times \sum\limits_{i=1}^{\lfloor \frac{n}{de} \rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{de} \rfloor} i^d \times j^d \\
= & \sum\limits_{d=1}^{\min(n,m)} d^d \sum\limits_{e=1}^{\lfloor \frac{\min(n,m)}{d} \rfloor} \mu(e) \times e^{2d} \times (\sum\limits_{i=1}^{\lfloor \frac{n}{de} \rfloor} i^d) \times (\sum\limits_{i=1}^{\lfloor \frac{m}{de} \rfloor} i^d) \\
\end{aligned}
\]
// Ad astra per aspera
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const long long mod=1000000007;
const int V=100000;
long long mu[500010],pre[500010];
long long pow_mod(long long num1,long long num2){
long long num3=1;
while(num2){
if(num2&1){
num3=num3*num1%mod;
}
num1=num1*num1%mod;
num2>>=1;
}
return num3;
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
int small=min(n,m),big=max(n,m);
mu[1]=1;
for(int i=1;i<=small;i++){
for(int j=2;j<=small/i;j++){
mu[i*j]-=mu[i];
}
}
long long ans=0;
for(int d=1;d<=small;d++){
for(int i=1;i<=big/d;i++){
pre[i]=(pre[i-1]+pow_mod(i,d))%mod;
}
long long sum=0;
for(int e=1;e<=small/d;e++){
sum+=mu[e]*pow_mod(e,2*d)%mod*pre[n/d/e]%mod*pre[m/d/e]%mod;
sum%=mod;
}
ans+=sum*pow_mod(d,d)%mod;
ans%=mod;
}
printf("%lld",ans);
return 0;
}

浙公网安备 33010602011771号