【莫比乌斯函数+除法分块】BZOJ2820[YY的GCD]题解
来源:互联网 发布:oracle数据库导入表 编辑:程序博客网 时间:2024/06/05 04:37
题目概述
求
解题报告
按照BZOJ2301的方法,得出答案式子:
直接枚举素数显然会爆炸,所以再转化一下,令
示例程序
#include<cstdio>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1e7;int te,n,m,mu[maxn+5],sum[maxn+5];int p[maxn+5];bool pri[maxn+5];void Make(){ pri[1]=true;mu[1]=1; for (int i=2;i<=maxn;i++) { if (!pri[i]) p[++p[0]]=i,mu[i]=-1; for (int j=1,t;j<=p[0]&&(t=i*p[j])<=maxn;j++) { pri[t]=true;mu[t]=-mu[i]; if (!(i%p[j])) {mu[t]=0;continue;} } } for (int j=1;j<=p[0];j++) for (int i=1;i*p[j]<=maxn;i++) sum[i*p[j]]+=mu[i]; for (int i=2;i<=maxn;i++) sum[i]+=sum[i-1];}inline LL Solve(){ scanf("%d%d",&n,&m);LL ans=0; for (int l=1,r;l<=n&&l<=m;l=r+1) r=min(n/(n/l),m/(m/l)),ans+=(LL)(sum[r]-sum[l-1])*(n/l)*(m/l); return ans;}int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); for (Make(),scanf("%d",&te);te;te--) printf("%lld\n",Solve()); return 0;}
阅读全文
0 0
- 【莫比乌斯函数+除法分块】BZOJ2820[YY的GCD]题解
- 【bzoj2820】YY的GCD 线性筛法+莫比乌斯反演+数论分块
- [莫比乌斯反演+分块求和] BZOJ2820: YY的GCD
- bzoj2820: YY的GCD 莫比乌斯反演
- 【莫比乌斯反演】[BZOJ2820]YY的GCD
- 【bzoj2820】YY的GCD 莫比乌斯反演
- 【bzoj2820】【YY的gcd】【莫比乌斯反演】
- Bzoj2820:YY的GCD:莫比乌斯反演
- [BZOJ2820]YY的GCD(莫比乌斯反演)
- [bzoj2820]YY的GCD 莫比乌斯反演
- 【莫比乌斯反演】BZOJ2820 YY的GCD
- bzoj2820 YY的GCD【莫比乌斯反演】
- BZOJ2820 YY的GCD 莫比乌斯反演
- BZOJ2820 YY的GCD 【莫比乌斯反演】
- bzoj2820 [bzoj2820]YY的GCD(线性素数筛+莫比乌斯反演)
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
- bzoj2820 YY的 (莫比乌斯函数)
- 莫比乌斯反演练习bzoj2440;bzoj2301;bzoj2820 YY的GCD
- 01.openssl基础介绍
- 购物车展示
- Java调用系统剪切板
- 数据结构实验之排序六:希尔排序
- python + openCV 实现图像轮廓识别和面积计算
- 【莫比乌斯函数+除法分块】BZOJ2820[YY的GCD]题解
- 数据结构-二叉树的遍历
- codeforces 903B. The Modcrab
- 浮躁的程序员
- NYACM_013
- 数据结构实验之排序四:寻找大富翁
- BZOJ 3160 万径人踪灭
- 【POI】读取Excel表中的数据
- bzoj 2287 消失之物