###题意:
求∑i=1i≤A∑j=1j≤B∑k=1k≤Cφ(gcd(i,j2,k3))\sum_{i=1}^{i\leq A}\sum_{j=1}^{j\leq B}\sum_{k=1}^{k\leq C}\varphi(gcd(i,j^2,k^3))i=1∑i≤Aj=1∑j≤Bk=1∑k≤Cφ(gcd(i,j2,k3))
###分析:
膜拜cch。。。
狄利克雷卷积:(f∗g)(D)=∑d∣Df(d)×g(Dd)(f*g)(D)=\sum_{d|D}f(d)\times g(\frac D d)(f∗g)(D)=∑d∣Df(d)×g(dD)
由狄利克雷卷积的性质,可得
e=1∗μe=1*\mue=1∗μ(e表示单位元)
φ=φ∗e=φ∗μ∗1\varphi=\varphi*e=\varphi*\mu*1φ=φ∗e=φ∗μ∗1(单位元卷任意函数等于其本身,且狄利克雷卷积具有交换律)
由此可得,原式=∑i=1i≤A∑j=1j≤B∑k=1k≤C∑d∣i,d∣j2,d∣k3(φ∗μ)(d)\sum_{i=1}^{i\leq A}\sum_{j=1}^{j\leq B}\sum_{k=1}^{k\leq C}\sum_{d|i,d|j^2,d|k^3}(\varphi*\mu)(d)i=1∑i≤Aj=1∑j≤Bk=1∑k≤Cd∣i,d∣j2,d∣k3∑(φ∗μ)(d)
=∑d=1d≤A(φ∗μ)(d)∑i=1i≤A∑j=1j≤B∑k=1k≤C[d∣i且d∣j2且d∣k3]=\sum_{d=1}^{d\leq A}(\varphi*\mu)(d)\sum_{i=1}^{i\leq A}\sum_{j=1}^{j\leq B}\sum_{k=1}^{k\leq C}[d|i且d|j^2且d|k^3]=d=1∑d≤A(φ∗μ)(d)i=1∑i≤Aj=1∑j≤Bk=1∑k≤C[d∣i且d∣j2且d∣k3]
将x唯一分解,设为x=∏pikix=\prod p_i^{k_i}x=∏piki,如果x∣ytx|y^tx∣yt那么∏pi⌈kit⌉∣y\prod p_i^{\lceil \frac {k_i} t\rceil}|y∏pi⌈tki⌉∣y
设ft(x)=∏pi⌈kit⌉f_t(x)=\prod p_i^{\lceil \frac {k_i} t\rceil}ft(x)=∏pi⌈tki⌉
那么原式就可以进一步化为
=∑d=1d≤A(φ∗μ)(d)⌊Af1(d)⌋⌊Bf2(d)⌋⌊Cf3(d)⌋=\sum_{d=1}^{d\leq A}(\varphi*\mu)(d)\lfloor \frac A {f_1(d)}\rfloor \lfloor \frac B {f_2(d)}\rfloor \lfloor \frac C {f_3(d)}\rfloor=d=1∑d≤A(φ∗μ)(d)⌊f1(d)A⌋⌊f2(d)B⌋⌊f3(d)C⌋
(其实f1(x)=xf_1(x)=xf1(x)=x)
(φ∗μ)(\varphi *\mu)(φ∗μ)肯定是积性函数,我就不解释了。。。
然后ft(x)f_t(x)ft(x)也可以通过欧拉筛的性质(被最小的质因数筛到),来线性地筛出来
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#define SF scanf
#define PF printf
#define MAXN 10000010
#define MAXP 10000000
#define MOD 1000000007
using namespace std;
int n;
int f[MAXN],f2[MAXN],f3[MAXN],ti[MAXN],las[MAXN];
bool isprime[MAXN];
int primes[MAXN],tot;
void prepare(){
f[1]=1;
f2[1]=1;
f3[1]=1;
for(int i=2;i<=MAXP;i++){
if(isprime[i]==0){
primes[++tot]=i;
f[i]=i-2;
las[i]=1;
ti[i]=1;
f2[i]=i;
f3[i]=i;
}
for(int j=1;1ll*primes[j]*i<=1ll*MAXP;j++){
isprime[i*primes[j]]=1;
if(i%primes[j]==0){
las[i*primes[j]]=las[i];
int x=las[i];
int p=primes[j];
int px=i*primes[j]/las[i];
f[i*primes[j]]=(px-2*px/p+px/p/p)*f[x];
ti[i*primes[j]]=ti[i]+1;
f2[i*primes[j]]=f2[i];
if(ti[i]%2==0)
f2[i*primes[j]]*=primes[j];
f3[i*primes[j]]=f3[i];
if(ti[i]%3==0)
f3[i*primes[j]]*=primes[j];
break;
}
las[i*primes[j]]=i;
ti[i*primes[j]]=1;
f[i*primes[j]]=f[i]*f[primes[j]];
f2[i*primes[j]]=f2[i]*f2[primes[j]];
f3[i*primes[j]]=f3[i]*f3[primes[j]];
}
}
}
int main(){
prepare();
SF("%d",&n);
int A,B,C;
while(n--){
SF("%d%d%d",&A,&B,&C);
int ans=0;
for(int i=1;i<=A;i++)
ans+=f[i]*(A/i)*(B/f2[i])*(C/f3[i]);
PF("%d\n",ans&((1<<30)-1));
}
}