记录编号 | 457299 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [BZOJ 2820] YY的GCD | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 13.601 s | ||
提交时间 | 2017-10-07 16:13:30 | 内存使用 | 162.43 MiB | ||
#include<iostream> #include<cstring> #include<cstdio> using namespace std; inline int read(){ int sum(0); char ch(getchar()); for(;ch<'0'||ch>'9';ch=getchar()); for(;ch>='0'&&ch<='9';sum=sum*10+(ch^48),ch=getchar()); return sum; } typedef long long L; int t,n,m; bool isnotprime[10000005]; int prime[10000005],mu[10000005],num; L f[10000005]; inline void play_table(){ mu[1]=1; for(int i=2;i<=10000000;++i){ if(!isnotprime[i]){ prime[++num]=i; mu[i]=-1; } for(int j=1;j<=num&&i*prime[j]<=10000000;++j){ isnotprime[i*prime[j]]=1; if(i%prime[j]==0){ mu[i*prime[j]]=0; break; } else mu[i*prime[j]]=-mu[i]; } } for(int i=1;i<=num;++i){ int p(prime[i]); for(int j=1;j*p<=10000000;++j) f[j*p]+=mu[j]; } for(int i=1;i<=10000000;++i) f[i]+=f[i-1]; } inline int gg(){ freopen("YYnoGCD.in","r",stdin); freopen("YYnoGCD.out","w",stdout); play_table(); t=read(); while(t--){ L ans(0); n=read(),m=read(); if(n>m) swap(n,m); for(int i=1,j;i<=n;i=j+1){ j=min(n/(n/i),m/(m/i)); ans+=(f[j]-f[i-1])*(n/i)*(m/i); } printf("%lld\n",ans); } return 0; } int K(gg()); int main(){;}