题面

传送门:洛咕


Solution

推到自闭,我好菜啊

显然,这题让我们求:
\(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\)

根据套路,我们可以把判断是否为质数改为枚举这个质数,有:
为了方便枚举,我们在这里假设有\(m>n\)
\(\large \sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k\in prime}^{n}[gcd(i,j)= k]\)
显然,要让\(gcd(i,j)=k\),必须要有\(i,j\)均为\(k\)的倍数,因此有:
\(\large \sum_{k\in prime}^{n}\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}[gcd(i,j)= 1]\) (在这里除号指向下取整)

根据套路,我们要去掉这里的判断符号。因为我们的莫比乌斯函数有这个性质:\([x=1]=\sum_{d|x}\mu(d)\),我们这里可以直接把\(gcd(i,j)\)作为\(x\)带入这个性质里面,有:
\(\large \sum_{k\in prime}^{n}\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}\sum_{d|gcd(i,j)}\mu(d)\)

然后根据套路,我们直接枚举这里的\(d\),有:
\(\large \sum_{k\in prime}^{n}\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}\sum_{d=1}^{n/k}μ(d)[d|gcd(i,j)]\) (因为前面\(i,j\)中最小的是\(n/k\),所以说我们这里\(d\)的最大值也为\(n/k\))
然后我们这里的\(\sum_{d=1}^{n/k}\)显然可以直接往前提
\(\large \sum_{k\in prime}^{n}\sum_{d=1}^{n/k}\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}μ(d)[d|gcd(i,j)]\)
这时候\(\mu(d)\)显然也可以往前提
\(\large \sum_{k\in prime}^{n}\sum_{d=1}^{n/k}μ(d)\sum_{i=1}^{n/k}\sum_{j=1}^{m/k}[d|gcd(i,j)]\)

这时候,我们可以发现后面那个判断式为1当且仅当\(i,j\)均为\(d\)的倍数,所以我们可以直接把那两个\(\sum\)简化掉
\(\large \sum_{k\in prime}^{n}\sum_{d=1}^{n/k}μ(d)\frac{n}{k*d}\frac{m}{k*d}\)

这时候,我们已经可以在\(O(logn*\sqrt n)\)的时间内算一次答案了(这里的\(log\)为质数个数),很可惜,这样的复杂度并不能通过这一题。

事实上,我们还有一个常见的套路来优化这里:
我们可以设\(T=k*d\),于是我们有:
\(\large \sum_{k\in prime}^{n}\sum_{d=1}^{n/k}μ(\frac{T}{k})\frac{n}{T}\frac{m}{T}\)
然后可以把后面那个和式提前,枚举T,有:
\(\large \sum_{T=1}^{n}\frac{n}{T}\frac{m}{T}\sum_{(k\in prime,k|T)}μ(\frac{T}{k})\)

搞定,到这里为止,我们一切东西都可以算了。
前面的\(\frac{n}{T}\frac{m}{T}\)可以整除分块来搞,后面那个\(μ\)可以在\(O(n)\)的时间预处理,然后算的时候前缀和一搞就ok啦。
如何预处理呢?我们可以考虑这样做:我们先枚举每一个质数\(x\),再考虑这个\(x\)对它的整数倍\(t\)的贡献为\(\mu(t)\)

酱紫,我们就可以在\(O(\sqrt n)\)的时间内处理每一个询问了。
完结撒花✿✿ヽ(°▽°)ノ✿


Code

//Luogu P2257 YY的GCD
//Jan,22ed,2019
//莫比乌斯反演
#include<iostream>
#include<cstdio>
using namespace std;
long long read()
{long long x=0,f=1; char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;
}
const int N=10000000+1000;
const int M=10000000;
int mu[N],prime[N],cnt_p;
bool noPrime[N];
void GetPrime(int n)
{mu[1]=1;noPrime[1]=true;for(int i=2;i<=n;i++){if(noPrime[i]==false)prime[++cnt_p]=i,mu[i]=-1;for(int j=1;j<=cnt_p and i*prime[j]<=n;j++){noPrime[i*prime[j]]=true;if(i%prime[j]==0){mu[i*prime[j]]=0;break;}mu[i*prime[j]]=mu[i]*mu[prime[j]];}}
}
long long f[N],pre_f[N];
int main()
{int t=clock();GetPrime(M);for(int i=1;i<=cnt_p;i++)for(int j=1;prime[i]*j<=M;j++)f[prime[i]*j]+=mu[j];for(int i=1;i<=M;i++)pre_f[i]=pre_f[i-1]+f[i];int T=read();for(;T>0;T--){long long n=read(),m=read();if(n>m) swap(n,m);int l=1,r=1;long long ans=0;for(;l<=n;l=r+1){r=min(n/(n/l),m/(m/l));ans+=(pre_f[r]-pre_f[l-1])*(n/l)*(m/l);}printf("%lld\n",ans);}cerr<<clock()-t;return 0;
}

转载于:https://www.cnblogs.com/GoldenPotato/p/10302839.html

[Luogu P2257] YY的GCD (莫比乌斯函数)相关推荐

  1. 洛谷P2257 YY的GCD 莫比乌斯函数反演+线性筛

    洛谷P2257 YY的GCD 标签 莫比乌斯反演 线性筛 前言 这题貌似和莫反没多大关系,就是用到了一个莫比乌斯函数的性质了,其他就是推公式,优化和式. 我的第一道懵逼反演-真的好难好难-而且套路特别 ...

  2. [洛谷P2257] YY的GCD (莫比乌斯反演)

    YY的GCD 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...

  3. acm-(数论、莫比乌斯反演)LuoGu P2257 YY的GCD

    传送门 本题就是让求这样一个式子: ∑ i = 1 n ⁣ ∑ j = 1 m [ g c d ( i , j ) i s p r i m e ] \sum_{i=1}^n\!\sum_{j=1}^m ...

  4. luogu P2257 YY的GCD

    嘟嘟嘟 感觉这几道数论题都差不多,但这到明显是前几道的升级版. 推了一大顿只能得60分,不得不看题解. 各位看这老哥的题解吧 我就是推到他用\(T\)换掉\(kd\)之前,然后枚举\(T\)的.这个转 ...

  5. P2257 YY的GCD

    P2257 YY的GCD 题意: 求 1≤x≤N,1≤y≤M1 \leq x \leq N,1 \leq y \leq M1≤x≤N,1≤y≤M 且gcd(x, y) 为质数的 (x,y) 有多少对. ...

  6. P2257 YY的GCD (莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...

  7. BZOJ 2820 YY的GCD 莫比乌斯反演

    2820: YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y) ...

  8. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  9. 洛谷 P2257 YY的GCD

    YY的GCD 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定\(N\), \(M\) ,求\(1 \le x \le N,1 \le y \le M\)且\(gcd(x, y)\)为质数的\( ...

最新文章

  1. chrome 适配调试_移动端适配
  2. (一)U盘安装ubuntu18.04.1
  3. 见识过世界的强大,才能拥有掌握世界的力量
  4. Mybatis—多表查询
  5. 淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!
  6. apache 编译php mysql_apache静/动态编译在apache+php+mysql应用
  7. 目标检测——如何处理任意输入尺寸的图片
  8. 强化学习的数学基础2---PPO算法
  9. 一个按钮多个ajax,如何为表格中的多个按钮设置AJAX调用
  10. Delphi 与 DirectX 之 DelphiX(15): TPictureCollectionItem.DrawWaveX、DrawWaveY ...
  11. 我在项目中运用 IOC(依赖注入)--入门篇
  12. php正则表达式修饰符详解
  13. Linux中缺32位运行库steam,Steam游戏必备运行库
  14. 大数据系列cdh版本下载
  15. Segment Tree Beats(吉司机线段树)
  16. 如何讲好一个故事 - by锤子手机活动策划负责人草威
  17. 滴滴的大数据可视化效果
  18. Mysql-DQL基础查询
  19. 用 8550 和 ULN2003 驱动小型直流电机正反转
  20. 欲先攻其事必先利其器 (第三方资源篇)

热门文章

  1. 我用python成为一名合格的阴阳师
  2. 苹果x怎么截屏_iPhone X小白点怎么设置 iPhone X小白点设置方法【详解介绍】
  3. SQL:分组排序取top N
  4. 9月16日科技资讯|拍照比剪刀手泄露指纹信息;国内绿 iPhone11 抢断货;PostgreSQL 12 Beta 4 发布
  5. 数字图像处理---边缘检测算法复现(ED、EDPF、CannySR、CannySRPF)
  6. 安兔兔跑分可信吗_骁龙888安兔兔跑分曝光,总分只有63.4万,翻车如此严重?...
  7. 家用服务器中心,家用存储娱乐服务器 篇二:硬件实战篇
  8. 2022-2028全球锂电铜箔行业调研及趋势分析报告
  9. 四川翌加:抖音小店开通后日常怎么运营维护
  10. 荣耀青春30青春版能升鸿蒙,荣耀30青春版参数配置 荣耀30青春版什么处理器