[bzoj3309]DZY Loves Math
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 10000005 4 int t,n,m,vis[N],p[N],f[N]; 5 long long ans; 6 int main(){ 7 f[1]=0; 8 for(int i=2;i<N-4;i++){ 9 if (!vis[i]){ 10 p[++p[0]]=i; 11 f[i]=1; 12 } 13 for(int j=1;(j<=p[0])&&(i*p[j]<N-4);j++){ 14 vis[i*p[j]]=1; 15 if (i%p[j]==0)break; 16 f[i*p[j]]=-f[i]; 17 } 18 } 19 for(int i=4000;i>1;i--) 20 if (f[i]) 21 for(int j=i;1LL*j*i<N-4;j*=i)f[j*i]=f[i]; 22 for(int i=1;i<N-4;i++)f[i]+=f[i-1]; 23 scanf("%d",&t); 24 while (t--){ 25 scanf("%d%d",&n,&m); 26 if (n<m)swap(n,m); 27 ans=0; 28 for(int i=1,j;i<=m;i=j+1){ 29 j=min(n/(n/i),m/(m/i)); 30 ans+=1LL*(n/i)*(m/i)*(f[j]-f[i-1]); 31 } 32 printf("%lld\n",ans); 33 } 34 }