2154: Crash的数字表格
∑ i = 1 n ∑ j = 1 m l c m ( i , j ) \sum_{i=1}^{n}\sum_{j=1}^{m} lcm(i,j) ∑i=1n∑j=1mlcm(i,j)
∑ i = 1 n ∑ j = 1 m i ∗ j ( i , j ) \sum_{i=1}^{n}\sum_{j=1}^{m} \frac{i*j}{(i,j)} ∑i=1n∑j=1m(i,j)i∗j
设d=(i,j)
F ( x , y ) = ∑ i ∈ [ 1 , x ] ∑ j ∈ [ 1 , y ] i ∗ j ∗ [ ( i , j ) = = 1 ] F(x,y)=\sum_{i\in[1,x]}\sum_{j\in[1,y]} i*j*[(i,j)==1] F(x,y)=∑i∈[1,x]∑j∈[1,y]i∗j∗[(i,j)==1]
则有 A n s = ∑ d = 1 m i n ( n , m ) d ∗ F ( n d , m d ) Ans=\sum_{d=1}^{min(n,m)} d*F(\frac{n}{d},\frac{m}{d}) Ans=∑d=1min(n,m)d∗F(dn,dm)
另 S u m ( x , y ) = ∑ i ∈ [ 1 , x ] ∑ y ∈ [ 1 , y ] i ∗ j = x ( x + 1 ) ∗ y ( y + 1 ) 4 Sum(x,y)=\sum_{i\in[1,x]}\sum_{y\in [1,y]} i*j=\frac{x(x+1)*y(y+1)}{4} Sum(x,y)=∑i∈[1,x]∑y∈[1,y]i∗j=4x(x+1)∗y(y+1)
F ( x , y ) = ∑ i = 1 m i n ( x , y ) i 2 ∗ μ ( i ) ∗ S u m ( x i , y i ) F(x,y)=\sum_{i=1}^{min(x,y)} i^2*\mu(i)*Sum(\frac{x}{i},\frac{y}{i}) F(x,y)=∑i=1min(x,y)i2∗μ(i)∗Sum(ix,iy)
F可以数论分块,Ans也可以,复杂度 O ( n ) O(n) O(n)
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=1e7+5,MOD=20101009;
typedef long long LL;
int p[MAXN/10],n,m,mu[MAXN];bool vis[MAXN];
void make_p(){
vis[0]=vis[1]=1;mu[1]=1;mu[0]=0;
for(int i=2;i<=m;i++){
if(!vis[i]) mu[i]=-1,p[++p[0]]=i;
for(int j=1;j<=p[0]&&i*p[j]<=m;j++)
if(vis[i*p[j]]=1,i%p[j]==0){mu[i*p[j]]=0;break;}
else mu[i*p[j]]-=mu[i];
}
}
int Sum(int x){return 1ll*(x+1)*x/2%MOD;}
int Solve(int x,int y){
if(x>y) swap(x,y);int Ans=0;
for(int i=1,j;i<=x;i=j+1){
j=min(x/(x/i),y/(y/i));
Ans=(Ans+1ll*((mu[j]-mu[i-1])%MOD+MOD)%MOD*Sum(x/i)%MOD*Sum(y/i)%MOD)%MOD;
}
return Ans;
}
int main(){
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);make_p();
for(int i=1;i<=1e7;i++) mu[i]=1ll*mu[i]*i%MOD*i%MOD;
for(int i=1;i<=1e7;i++) mu[i]=(mu[i]+mu[i-1])%MOD;
int Ans=0;
for(int i=1,j;i<=n;i=j+1){
j=min(n/(n/i),m/(m/i));
Ans=(Ans+1ll*(i+j)*(j-i+1)/2%MOD*Solve(n/i,m/i)%MOD)%MOD;
}
printf("%d\n",Ans);
return 0;
}