标签:
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define esp 0.00000000001 #define pi 4*atan(1) const int N=1e7+10,M=1e7+10,inf=1e9+10,mod=1e9+7; int mu[N], p[N], np[N], cnt, sum[N]; ll gg[N]; void init() { mu[1]=1; for(int i=2; i<N; ++i) { if(!np[i]) p[++cnt]=i, mu[i]=-1; for(int j=1; j<=cnt && i*p[j]<N; ++j) { int t=i*p[j]; np[t]=1; if(i%p[j]==0) { mu[t]=0; break; } mu[t]=-mu[i]; } } for(int i=1;i*i<N;i++) { for(int t=i*i;t<N;t+=(i*i)) sum[t]+=mu[t/i/i]; } for(int i=1;i<N;i++) gg[i]=gg[i-1]+sum[i]; } ll getans(ll b,ll d) { if(b>d)swap(b,d); ll ans=0; for(ll L=1,R=0;L<=b;L=R+1) { R=min(b/(b/L),d/(d/L)); ans+=(b/L)*(d/L)*(gg[R]-gg[L-1]); } return ans; } int main() { int T; init(); scanf("%d",&T); while(T--) { ll b,d; scanf("%I64d%I64d",&b,&d); printf("%I64d\n",(b*d)-getans(b,d)); } return 0; }
hdu 5663 Hillan and the girl 莫比乌斯反演
标签:
原文地址:http://www.cnblogs.com/jhz033/p/5790129.html