思路:

$\Sigma_{i=1}^n\Sigma_{j=1}^mgcd(i,j)==p(p是素数)$

$\Sigma_{p是素数}^{p<=n}\Sigma_{i=1}^{\lfloor \frac{n}{p} \rfloor}\Sigma_{j=1}^{\lfloor \frac{m}{p} \rfloor}gcd(i,j)==1$

由$e=μ|1$可得$gcd(i,j)==1 等价于 \Sigma_{d|gcd(i,j)} μ(d)$

所以原式为

$\Sigma_{p是素数}^{p<=n}\Sigma_{i=1}^{\lfloor \frac{n}{p} \rfloor}\Sigma_{j=1}^{\lfloor \frac{m}{p}\rfloor}\Sigma_{d|gcd(i,j)}μ(d)$

$\Sigma_{p是素数}^{p<=n}\Sigma_{i=1}^{\lfloor \frac{n}{p} \rfloor}\Sigma_{j=1}^{\lfloor \frac{m}{p}\rfloor}\Sigma_{d|i且d|j}μ(d)$

$\Sigma_{p是素数}^{p<=n}\Sigma_{d=1}^{\frac{n}{p}}\lfloor{\frac{n}{pd}}\rfloor\lfloor{\frac{m}{pd}}\rfloor μ(d)$

设$k=pd$

$\Sigma_{k=1}^{min(n,m)}\lfloor{\frac{n}{k}}\rfloor\lfloor{\frac{m}{k}}\rfloor\Sigma_{p|k}μ(\frac{k}{p})$

设$g(x)=\Sigma_{p|k}μ(\frac{k}{p})$

可以预处理g(x)

怎么求g(x)呢

有两种方法

1.暴力枚举

枚举素数 p

用$μ(p)$更新$μ(i*p)(i*p<=max(n,m))$

这样素数有$n/logn$个

枚举i的均摊复杂度是$O(logn)$的

乘起来就是$O(n)$了

2.
线性筛

对于素数p g(p)=1(显然)

由于$μ(x)_{x的因子有平方项}=0$


所以$prime[j]|i$的时候$g(i*prime[j])$的结果就是$μ(i)$了


因为我们求的是$\Sigma_{p|k}μ(\frac{k}{p})$而且$μ(x)$是积性函数


那我们不妨设$i*prime[j]=k$


设$P$是包含$prime[j]$的所有素数 $p$是不包含$prime[j]$的所有素数


$\Sigma_{P|k}μ(\frac{k}{P})=\Sigma_{P|k}μ(\frac{i*prime[j]}{P})$


$=\Sigma(μ(\frac{i}{p})*μ(prime[j]))+μ\frac{(i*prime[j])}{prime[j]}$


$=μ(prime[j])*g[i]+μ(i)=-g[i]+μ(i)$

处理完了g(x)

原式就是这个样子的$\Sigma_{k=1}^{min(n,m)}\lfloor{\frac{n}{k}}\rfloor\lfloor{\frac{m}{k}}\rfloor g(k)$

对于g(k)搞个前缀和

$\lfloor{\frac{n}{k}}\rfloor\lfloor{\frac{m}{k}}\rfloor$这个东西可以分块

终于搞完了
喜闻乐见
吼吼

枚举素数的

//By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=10000005;
#define int long long
int cases,n,m,mu[maxn],p[maxn],sum[maxn],f[maxn],tot;
long long ans;bool vis[maxn];
signed main(){mu[1]=1;for(int i=2;i<maxn;i++){if(!vis[i])p[++tot]=i,mu[i]=-1;for(int j=1;j<=tot&&i*p[j]<maxn;j++){mu[i*p[j]]=-mu[i],vis[i*p[j]]=1;if(!(i%p[j])){mu[i*p[j]]=0;break;}}}for(int i=1;i<=tot;i++)for(int j=1;j*p[i]<maxn;j++)f[j*p[i]]+=mu[j];for(int i=1;i<maxn;i++)f[i]+=f[i-1];scanf("%d",&cases);while(cases--){scanf("%d%d",&n,&m),ans=0;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);}
}

这是线性筛的

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=10000005;
int T,prime[N],vis[N],mu[N],tot,n,m;ll f[N],ans;
int main(){mu[1]=1;for(int i=2;i<N;i++){if(!vis[i])prime[++tot]=i,mu[i]=-1,f[i]=1;for(int j=1;i*prime[j]<N&&j<=tot;j++){vis[i*prime[j]]=1,mu[i*prime[j]]=-mu[i],f[i*prime[j]]=-f[i]+mu[i]; if(i%prime[j]==0){mu[i*prime[j]]=0;f[i*prime[j]]=mu[i];break;}}f[i]+=f[i-1];}scanf("%d",&T);while(T--){scanf("%d%d",&n,&m),ans=0;for(int l=1,r;l<=min(n,m);l=r+1){r=min(n/(n/l),m/(m/l));ans+=1ll*(f[r]-f[l-1])*(n/l)*(m/l);}printf("%lld\n",ans);}
}

转载于:https://www.cnblogs.com/SiriusRen/p/6680518.html

BZOJ 2820 莫比乌斯反演相关推荐

  1. BZOJ 3309 莫比乌斯反演

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3309 题意:定义f(n)为n所含质因子的最大幂指数,求 $Ans=\sum _{i=1} ...

  2. HDU 1695 BZOJ 2301 莫比乌斯反演

    看了两个多小时,大概意思我觉得莫比乌斯是一个利用一个数的能被整除的一些数,通过容斥来计算出这个数的一些信息,很高级.这个题就当做是模板吧.然后把两种形式贴出来: 第一种: 第二种: 然后是容斥的函数: ...

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

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

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

    题意:链接 方法:莫比乌斯反演 解析: 这题跟上一篇博客有一点差别,当然我们能够考虑枚举素数这个大暴力.只是当你A掉这道题后发现正解?都将近5s时.就放弃了这个念头. 相同的式子我们能够直接搬过来.p ...

  5. 【bzoj 2820】YY的GCD(莫比乌斯反演)

    传送门biu~ 参考博客:莫比乌斯反演 #include<bits/stdc++.h> #define N 10000000 using namespace std; int T,n,m, ...

  6. BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=5330 (Luogu) https://www.luogu.org/prob ...

  7. BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)

    BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演) 手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/ ...

  8. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...

  9. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+分块)

    URL: (Luogu)https://www.luogu.org/problem/show?pid=3455 (BZOJ)http://www.lydsy.com/JudgeOnline/probl ...

最新文章

  1. Wireshark分析器分析数据流过程
  2. 【转】软件工程师的年终总结2
  3. 【LDA学习系列】神奇的Gama函数Python代码
  4. NYOJ 106 背包问题
  5. 线上环境HBASE-1.2.0出现oldWALs无法自动回收情况;
  6. mongodb golang 批量更新_Mongodb读取数据缓慢问题-Sparkamp;Mongodb
  7. 云画质助手iApp源码
  8. android 上位机下位机串口通讯,上位机下位机串口通信.doc
  9. 【剑桥摄影协会】伽马校正(Gamma)
  10. dw怎么把dwt文件转成html文件,在Dreamweaver中如何使用模板?
  11. ArcGIS Pro常见地图包系列--切片包(TPK)
  12. java 中的radix_Java Scanner radix()方法与示例
  13. Selenium使用中的SSL错误
  14. Unity文档——AssetBundle使用模式
  15. 线段树 树状数组 离散化相关例题
  16. 【智力题】小环绕大环
  17. linux下用vi,vim编辑时退出编辑模式(wq)无法保存退出
  18. 3.6 51单片机-动态数码管
  19. 使用layui做二级菜单,选父级必选子级
  20. Flink 面试通关手册

热门文章

  1. 线性回归和逻辑回归的区别_线性回归
  2. .Net转Java自学之路—Hibernate框架篇三(查询方式)
  3. 号外号外!RancherOS v1.2.0发布啦!
  4. 团队-及格成绩查询系统-设计文档
  5. no.8 C控制语句:循环 01
  6. ubuntu root用户没有声音(提示”正在等待声音系统响应”)
  7. 阿杜版主 我找您有事想请教下您!!
  8. php采集百度推荐词,php抓取百度快照、百度收录、百度热词程序代码_PHP教程
  9. C# static的用法详解
  10. JAVA面向对象的特征