1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 50001 4 int t,n,m,k,ans,mu[N],vis[N],p[N]; 5 void mobius(){ 6 mu[1]=1; 7 for(int i=2;i<N;i++){ 8 if (!vis[i]){ 9 p[++p[0]]=i; 10 mu[i]=-1; 11 } 12 for(int j=1;i*p[j]<N;j++){ 13 vis[i*p[j]]=1; 14 if (i%p[j])mu[i*p[j]]=-mu[i]; 15 else{ 16 mu[i*p[j]]=0; 17 break; 18 } 19 } 20 } 21 for(int i=1;i<N;i++)mu[i]+=mu[i-1]; 22 } 23 int main(){ 24 scanf("%d",&t); 25 mobius(); 26 while (t--){ 27 scanf("%d%d%d",&n,&m,&k); 28 n/=k; 29 m/=k; 30 ans=0; 31 for(int i=1,j;i<=min(n,m);i=j+1){ 32 j=min(n/(n/i),m/(m/i)); 33 ans+=(mu[j]-mu[i-1])*(n/i)*(m/i); 34 } 35 printf("%d\n",ans); 36 } 37 }
原文地址:https://www.cnblogs.com/PYWBKTDA/p/11247985.html
时间: 2024-10-29 12:14:25