2820: YY的GCD 莫比乌斯反演
来源:互联网 发布:浙江大学软件学院面试 编辑:程序博客网 时间:2024/06/05 04:44
这道题与Problem b是非常相似的,只不过不是求一个固定的数,是求素数。
那么我们可以得到:
为表述方便,不妨令
那么现在就考虑怎样预处理
设
①若
②若
然后我们就可以愉快的进行线性筛+分块辣。
#include<iostream>#include<cstdio>#define MAXN 10000005#define ll long longusing namespace std;int prime[MAXN],mobius[MAXN],f[MAXN],sum[MAXN];bool flag[MAXN];inline int read(){ int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f;}inline void prepare(){ mobius[1]=1; for (int i=2;i<MAXN;i++) { if (!flag[i]) prime[++prime[0]]=i,mobius[i]=-1,f[i]=1; for (int j=1;j<=prime[0]&&i*prime[j]<MAXN;j++) { flag[i*prime[j]]=1; if (i%prime[j]==0) { mobius[i*prime[j]]=0; f[i*prime[j]]=mobius[i]; break; } else mobius[i*prime[j]]=-mobius[i],f[i*prime[j]]=mobius[i]-f[i]; } } for (int i=1;i<MAXN;i++) sum[i]=sum[i-1]+f[i];} int main(){ prepare(); int testcase=read(); while (testcase--) { ll n=read(),m=read(); if (n>m) swap(n,m); ll ans=0; int pos=0; for (int i=1;i<=n;i=pos+1) { pos=min(n/(n/i),m/(m/i)); ans+=(sum[pos]-sum[i-1])*(n/i)*(m/i); } printf("%lld\n",ans); } return 0;}
0 0
- BZOJ 2820 YY的GCD 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ 2820 YY的GCD]
- BZOJ 2820 YY的GCD 莫比乌斯反演
- 2820: YY的GCD|莫比乌斯反演
- 2820: YY的GCD 莫比乌斯反演
- [莫比乌斯反演] BZOJ 2820 YY的GCD
- BZOJ 2820 YY的GCD(莫比乌斯反演)
- bzoj 2820: YY的GCD 莫比乌斯反演
- BZOJ 2820 YY的GCD 莫比乌斯反演
- 【BZOJ 2820】YY的GCD 莫比乌斯反演
- BZOJ 2820 YY的GCD 莫比乌斯反演
- [BZOJ 2820]YY的GCD:莫比乌斯反演
- bzoj2820: YY的GCD 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ2820]YY的GCD
- 【bzoj2820】YY的GCD 莫比乌斯反演
- BZOJ_P2820 YY的GCD(数论+莫比乌斯反演)
- 【bzoj2820】【YY的gcd】【莫比乌斯反演】
- Bzoj2820:YY的GCD:莫比乌斯反演
- 关于CSS居中显示的总结
- APP测试之找回密码
- Android APP如何防止二次打包
- java小游戏第二弹 打地鼠
- Webrtc服务器搭建
- 2820: YY的GCD 莫比乌斯反演
- Windows下配置Nginx和PHP7
- 机器学习实战-逻辑回归
- Matlab中图像梯度的计算方式
- BZOJ3670 NOI2014 动物园 题解&代码
- 基础的排序C++实现
- Spring注解解析
- Android Studio ——Service的生命周期
- APP测试之找回密码