不妨先设n<=mn<=mn<=m。
把题目的柿子推一下:
∑i=1n∑j=1mlcm(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)i=1∑nj=1∑mlcm(i,j)
由于lcm(i,j)∗gcd(i,j)=ijlcm(i,j)*gcd(i,j)=ijlcm(i,j)∗gcd(i,j)=ij
=∑i=1n∑j=1mijgcd(i,j)=\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{gcd(i,j)}=i=1∑nj=1∑mgcd(i,j)ij
设d=gcd(i,j)d=gcd(i,j)d=gcd(i,j),我们枚举ddd,提到最前面,再枚举iii是ddd的几倍、jjj是ddd的几倍。
=∑d=1n∑i=1⌊nd⌋∑j=1⌊md⌋(d×i)×(d×j)d[gcd((d×i),(d×j))=d]=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}\frac{(d\times i)\times (d\times j)}{d}[gcd((d\times i),(d\times j))=d]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋d(d×i)×(d×j)[gcd((d×i),(d×j))=d]
则在上面这个柿子中,(d×i)(d\times i)(d×i)为原来的iii,(d×j)(d\times j)(d×j)为原来的jjj。将分式化简,gcd(d×i,d×j)=dgcd(d\times i,d\times j)=dgcd(d×i,d×j)=d里同时约掉一个ddd得:
=∑d=1n∑i=1⌊nd⌋∑j=1⌊md⌋d×i×j[gcd(i,j)=1]=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}d\times i\times j[gcd(i,j)=1]=d=1∑ni=1∑⌊dn⌋j=1∑⌊dm⌋d×i×j[gcd(i,j)=1]
考虑到∑i∣nμ(i)=[n=1]\sum_{i|n}\mu(i)=[n=1]∑i∣nμ(i)=[n=1],代入[gcd(i,j)=1][gcd(i,j)=1][gcd(i,j)=1]得:
=∑d=1nd∑i=1⌊nd⌋∑j=1⌊md⌋i×j∑k∣gcd(i,j)μ(k)=\sum_{d=1}^{n}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} i\times j\sum_{k|gcd(i,j)}\mu(k)=d=1∑ndi=1∑⌊dn⌋j=1∑⌊dm⌋i×jk∣gcd(i,j)∑μ(k)
我们再次枚举kkk,提到∑d=1n\sum_{d=1}^n∑d=1n后:
=∑d=1nd∑k=1⌊nd⌋μ(k)∑i=1⌊nd⌋∑j=1⌊md⌋i×j[k∣gcd(i,j)]=\sum_{d=1}^n d\sum_{k=1}^{\lfloor \frac{n}{d} \rfloor}\mu(k)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}i\times j[k|gcd(i,j)]=d=1∑ndk=1∑⌊dn⌋μ(k)i=1∑⌊dn⌋j=1∑⌊dm⌋i×j[k∣gcd(i,j)]
考虑到[k∣gcd(i,j)][k|gcd(i,j)][k∣gcd(i,j)]即为[k∣i,k∣j][k|i,k|j][k∣i,k∣j]:
(1)=∑d=1nd∑k=1⌊nd⌋μ(k)∑i=1⌊nd⌋i[k∣i]∑j=1⌊md⌋j[k∣j]=\sum_{d=1}^n d\sum_{k=1}^{\lfloor \frac{n}{d} \rfloor}\mu(k)\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}i[k|i]\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}j[k|j] \tag{1}=d=1∑ndk=1∑⌊dn⌋μ(k)i=1∑⌊dn⌋i[k∣i]j=1∑⌊dm⌋j[k∣j](1)
这时我们先推另一个柿子:∑i=1n[k∣i]\sum_{i=1}^n[k|i]∑i=1n[k∣i],也就是询问111~nnn这些数中有多少个数是kkk的倍数,答案显然是⌊nk⌋\lfloor \frac{n}{k} \rfloor⌊kn⌋。
但如果是求∑i=1ni[k∣i]\sum_{i=1}^ni[k|i]∑i=1ni[k∣i]呢?
也就是吧所有111~nnn中所有是kkk的倍数的数加起来,答案显然就是1×k+2×k+...+⌊nk⌋×k=(1+2+...+⌊nk⌋)×k=(1+⌊nk⌋)×⌊nk⌋×k21\times k+2\times k+...+\lfloor \frac{n}{k} \rfloor \times k=(1+2+...+\lfloor \frac{n}{k} \rfloor)\times k=\frac{(1+\lfloor \frac{n}{k} \rfloor)\times \lfloor \frac{n}{k} \rfloor \times k}{2}1×k+2×k+...+⌊kn⌋×k=(1+2+...+⌊kn⌋)×k=2(1+⌊kn⌋)×⌊kn⌋×k
把这个代入(1)(1)(1)得
=∑d=1nd∑k=1⌊nd⌋μ(k)×(1+⌊⌊nd⌋k⌋)×⌊⌊nd⌋k⌋×k2×(1+⌊⌊md⌋k⌋)×⌊⌊md⌋k⌋×k2=\sum_{d=1}^n d\sum_{k=1}^{\lfloor \frac{n}{d} \rfloor}\mu(k)\times\frac{(1+\lfloor \frac{\lfloor \frac{n}{d} \rfloor}{k} \rfloor)\times \lfloor \frac{\lfloor \frac{n}{d} \rfloor}{k} \rfloor \times k}{2}\times\frac{(1+\lfloor \frac{\lfloor \frac{m}{d} \rfloor}{k} \rfloor)\times \lfloor \frac{\lfloor \frac{m}{d} \rfloor}{k} \rfloor \times k}{2}=d=1∑ndk=1∑⌊dn⌋μ(k)×2(1+⌊k⌊dn⌋⌋)×⌊k⌊dn⌋⌋×k×2(1+⌊k⌊dm⌋⌋)×⌊k⌊dm⌋⌋×k
化简一下这个难看的柿子:
=14∑d=1nd∑k=1⌊nd⌋μ(k)×k2×(1+⌊ndk⌋)×⌊ndk⌋×(1+⌊mdk⌋)×⌊mdk⌋=\frac{1}{4}\sum_{d=1}^n d\sum_{k=1}^{\lfloor \frac{n}{d} \rfloor}\mu(k)\times k^2\times(1+ \lfloor \frac{n}{dk} \rfloor)\times \lfloor \frac{n}{dk} \rfloor \times(1+ \lfloor \frac{m}{dk} \rfloor)\times \lfloor \frac{m}{dk} \rfloor=41d=1∑ndk=1∑⌊dn⌋μ(k)×k2×(1+⌊dkn⌋)×⌊dkn⌋×(1+⌊dkm⌋)×⌊dkm⌋
然后令T=dkT=dkT=dk,我们枚举TTT,并提到前面来。
=14∑T=1n(1+⌊nT⌋)×⌊nT⌋×(1+⌊mT⌋)×⌊mT⌋∑d∣Td×μ(Td)×T2d2=14∑T=1n(1+⌊nT⌋)×⌊nT⌋×(1+⌊mT⌋)×⌊mT⌋∑d∣Tμ(Td)×T2d\begin{aligned} & =\frac{1}{4}\sum_{T=1}^{n}(1+ \lfloor \frac{n}{T} \rfloor)\times \lfloor \frac{n}{T} \rfloor \times(1+ \lfloor \frac{m}{T} \rfloor)\times \lfloor \frac{m}{T} \rfloor\sum_{d|T}d\times\mu(\frac{T}{d})\times\frac{T^2}{d^2}\\ & =\frac{1}{4}\sum_{T=1}^{n}(1+ \lfloor \frac{n}{T} \rfloor)\times \lfloor \frac{n}{T} \rfloor \times(1+ \lfloor \frac{m}{T} \rfloor)\times \lfloor \frac{m}{T} \rfloor\sum_{d|T}\mu(\frac{T}{d})\times\frac{T^2}{d}\end{aligned}=41T=1∑n(1+⌊Tn⌋)×⌊Tn⌋×(1+⌊Tm⌋)×⌊Tm⌋d∣T∑d×μ(dT)×d2T2=41T=1∑n(1+⌊Tn⌋)×⌊Tn⌋×(1+⌊Tm⌋)×⌊Tm⌋d∣T∑μ(dT)×dT2
令
f(T)=∑T=1n(1+⌊nT⌋)×⌊nT⌋×(1+⌊mT⌋)×⌊mT⌋f(T)=\sum_{T=1}^{n}(1+ \lfloor \frac{n}{T} \rfloor)\times \lfloor \frac{n}{T} \rfloor \times(1+ \lfloor \frac{m}{T} \rfloor)\times \lfloor \frac{m}{T} \rfloorf(T)=T=1∑n(1+⌊Tn⌋)×⌊Tn⌋×(1+⌊Tm⌋)×⌊Tm⌋
g(T)=∑d∣Tμ(Td)×T2dg(T)=\sum_{d|T}\mu(\frac{T}{d})\times\frac{T^2}{d}g(T)=d∣T∑μ(dT)×dT2
那么显然,对于f(T)f(T)f(T),我们可以用数论分块做出来。
而对于g(T)g(T)g(T),由于μ(Td)\mu(\frac{T}{d})μ(dT)是积性函数,T2d\frac{T^2}{d}dT2是完全积性函数,所以g(T)g(T)g(T)也是积性函数。
那么对于g(T)g(T)g(T),我们在线性筛时分三种情况讨论:
-
T=pT=pT=p,其中ppp为质数,那么我们再看回这个柿子:
g(T)=∑d∣Tμ(Td)×T2dg(T)=\sum_{d|T}\mu(\frac{T}{d})\times\frac{T^2}{d}g(T)=d∣T∑μ(dT)×dT2
明显,由于μ\muμ的定义,所以当且仅当Td=1\frac{T}{d}=1dT=1或Td=p\frac{T}{d}=pdT=p时才能产生贡献,使μ(Td)≠0\mu(\frac{T}{d})\ne0μ(dT)̸=0。
若Td=1\frac{T}{d}=1dT=1,则T=d=pT=d=pT=d=p,
μ(Td)×T2d=μ(1)×p2p=p\mu(\frac{T}{d})\times\frac{T^2}{d}=\mu(1)\times\frac{p^2}{p}=pμ(dT)×dT2=μ(1)×pp2=p
若Td=p\frac{T}{d}=pdT=p,又T=pT=pT=p,则d=1d=1d=1,
μ(Td)×T2d=μ(p)×p21=−p2\mu(\frac{T}{d})\times\frac{T^2}{d}=\mu(p)\times\frac{p^2}{1}=-p^2μ(dT)×dT2=μ(p)×1p2=−p2
合并起来,即为
g(T)=∑d∣Tμ(Td)×T2d=p−p2g(T)=\sum_{d|T}\mu(\frac{T}{d})\times\frac{T^2}{d}=p-p^2g(T)=d∣T∑μ(dT)×dT2=p−p2
-
T=i∗pT=i*pT=i∗p,其中ppp为质数,i≠1i\ne1i̸=1且i%p≠0i\%p \ne 0i%p̸=0,即gcd(i,p)=1gcd(i,p)=1gcd(i,p)=1。那么g(T)=g(i)×g(p)g(T)=g(i)\times g(p)g(T)=g(i)×g(p)
-
T=i∗pT=i*pT=i∗p,其中ppp为质数,i≠1i\ne1i̸=1且i%p=0i\%p = 0i%p=0,即gcd(i,p)=pgcd(i,p)=pgcd(i,p)=p,不妨设i=t×pki=t\times p^ki=t×pk。
考虑推出:
g(pk)=∑d∣pkμ(pkd)×p2kdg(p^k)=\sum_{d|{p^k}}\mu(\frac{p^k}{d})\times\frac{p^{2k}}{d}g(pk)=d∣pk∑μ(dpk)×dp2k
根据μ\muμ的定义,当且仅当pkd=1\frac{p^k}{d}=1dpk=1或pkd=p\frac{p^k}{d}=pdpk=p时才能产生贡献,使μ(pkd)≠0\mu(\frac{p^k}{d})\ne0μ(dpk)̸=0。
分情况讨论解得:
g(pk)=∑d∣pkμ(pkd)×p2kd=μ(pkpk)×p2kpk+μ(pkpk−1)×p2kpk−1=pk−pk+1 \begin{aligned} g(p^k) & =\sum_{d|{p^k}}\mu(\frac{p^k}{d})\times\frac{p^{2k}}{d}\\ & =\mu(\frac{p^k}{p^k})\times \frac{p^{2k}}{p^k}+\mu(\frac{p^k}{p^{k-1}})\times\frac{p^{2k}}{p^{k-1}}\\ & =p^k-p^{k+1} \end{aligned} g(pk)=d∣pk∑μ(dpk)×dp2k=μ(pkpk)×pkp2k+μ(pk−1pk)×pk−1p2k=pk−pk+1
同理,我们可以推得:
g(pk+1)=pk+1−pk+2g(p^{k+1})=p^{k+1}-p^{k+2}g(pk+1)=pk+1−pk+2
由上述2式可得:
(2)g(pk+1)=g(pk)×pg(p^{k+1})=g(p^k)\times p \tag{2}g(pk+1)=g(pk)×p(2)
则
g(T)=g(i×p)=g(t×pk×p)=g(t)×g(pk+1)(t、p互质)=g(t)×g(pk)×p(结论(2))=g(t×pk)×p(t、p互质)=g(i)×p \begin{aligned} g(T) & =g(i\times p)\\ & =g(t\times p^k \times p)\\ & =g(t)\times g(p^{k+1})\text{($t$、$p$互质)}\\ & =g(t)\times g(p^k)\times p\text{(结论(2))}\\ & =g(t\times p^k)\times p\text{($t$、$p$互质)}\\ & =g(i)\times p \end{aligned} g(T)=g(i×p)=g(t×pk×p)=g(t)×g(pk+1)(t、p互质)=g(t)×g(pk)×p(结论(2))=g(t×pk)×p(t、p互质)=g(i)×p
那么我们可以分3种情况讨论,线性求出每一个g(T)g(T)g(T),再维护一下g(T)g(T)g(T)的前缀和就好了。
最后的代码如下:
#include<bits/stdc++.h>
#define N 10000010
#define ll long long
#define mod 100000009
using namespace std;
int t,n,m,cnt;
ll prime[N],g[N],sum[N];
bool notprime[N];
void work()
{
int maxn=N-10;
g[1]=1;//记得初始化
for(int i=2;i<=maxn;i++)
{
if(!notprime[i])
{
prime[++cnt]=i;
g[i]=((i-1ll*i*i)%mod+mod)%mod;//第一种情况:T=p
}
for(int j=1;j<=cnt&&i*prime[j]<=maxn;j++)
{
notprime[i*prime[j]]=true;
if(!(i%prime[j]))
{
g[i*prime[j]]=g[i]*prime[j]%mod;//第二种情况:T=i%p且i%p=0
break;
}
g[i*prime[j]]=g[i]*g[prime[j]]%mod;//第三种情况:T=i%p且i%p!=0
}
}
for(int i=1;i<=maxn;i++)
sum[i]=(sum[i-1]+g[i])%mod;//维护前缀和
}
ll query(int n,int m)
{
ll ans=0;
for(int l=1,r=0;l<=n;l=r+1)//数论分块
{
r=min(n/(n/l),m/(m/l));
ll x=n/l,y=m/l;
ans=(ans+(((1ll+x)*x/2ll%mod)*((1ll+y)*y/2%mod)%mod)*(sum[r]-sum[l-1])%mod)%mod;
}
return ans;
}
int main()
{
work();//线性筛
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
if(n>m)swap(n,m);
printf("%lld\n",(query(n,m)%mod+mod)%mod);
}
return 0;
}