第一次做莫比乌斯反演,推式子真是快乐的很啊(棒读)

前置

若函数\(F(n)\)和\(f(d)\)存在以下关系

\[ F(n)=\sum_{n|d}f(d)
\]

则可以推出

\[ f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)
\]

这就是莫比乌斯反演

题目要求

求\(gcd(a,b)=\{prime\},a\in\left[1,n\right],b\in\left[1,m\right]\)

思路

根据题意所以设出\(f(n)\)表示\(gcd(a,b)=n\)的\(a,b\)对数

根据莫比乌斯反演的形式

\[ F(n)=\sum_{n|d}f(d)
\]

可以设出一个函数\(F(n)\),表示\(n|gcd(a,b)\)的\((a,b)\)对数

因为\(n|gcd(a,b)\),所以\(a=k_1\times n,b=k_2\times n\)

所以显然有

\[ F(x)=\lfloor\frac{n}{x}\rfloor\times\lfloor\frac{m}{x}\rfloor
\]

因为

\[ f(x)=\sum_{x|d}\mu(\frac{d}{x})F(d)
\]

所以

\[ f(x)=\sum_{x|d}\mu(\frac{d}{x})\times\lfloor\frac{n}{d}\rfloor\times\lfloor\frac{m}{d}\rfloor
\]

考虑到\(\frac{d}{n}\)的形式并不优美,我们换一种东西枚举

\[ f(x)=\sum_{t=1}^{\lfloor\frac{n}{x}\rfloor}\mu(t)\times\lfloor\frac{n}{t\times x}\rfloor\times\lfloor\frac{m}{t\times x}\rfloor
\]

所以

\[ ans=\sum_{x\in\{prime\}}^nf(x)=\sum_{x\in\{prime\}}^n\sum_{t=1}^{\lfloor\frac{n}{x}\rfloor}\mu(t)\times\lfloor\frac{n}{t\times x}\rfloor\times\lfloor\frac{m}{t\times x}\rfloor
\]

这样能拿到50PTS

然后设\(T=t*x\),这样形式就变得更优美了一些

原式变形为

\[ ans=\sum_{x\in\{prime\}}^nf(x)=\sum_{x\in\{prime\}}^n\sum_{t=1}^{\lfloor\frac{n}{x}\rfloor}\mu(\frac{T}{x})\times\lfloor\frac{n}{T}\rfloor\times\lfloor\frac{m}{T}\rfloor
\]

\[ ans=\sum_{x\in\{prime\}}^nf(x)=\sum_{T=1}^{min(n,m)}\sum_{d\in\{prime\},d|T}\mu(\frac{T}{d})\times\lfloor\frac{n}{T}\rfloor\times\lfloor\frac{m}{T}\rfloor
\]

\[ ans=\sum_{x\in\{prime\}}^nf(x)=\sum_{T=1}^{min(n,m)}\lfloor\frac{n}{T}\rfloor\times\lfloor\frac{m}{T}\rfloor\times\sum_{d\in\{prime\},d|T}\mu(\frac{T}{d})
\]

后面\(\mu\)的部分可以前缀和一下

前面的可以整除分块

加上线性筛

然后没了

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
short mu[10001000];
int n,m,T,iprime[10001000],cnt,isprime[10001000],summu[10001000];
void prime(int n){
mu[1]=1;
isprime[1]=true;
for(int i=2;i<=n;i++){
if(!isprime[i])
iprime[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&iprime[j]*i<=n;j++){
isprime[iprime[j]*i]=true;
if(i%iprime[j]==0){
mu[iprime[j]*i]=0;
break;
}
mu[iprime[j]*i]=-mu[i];
}
}
for(int i=1;i<=cnt;i++)
for(int j=1;j*iprime[i]<=n;j++)
summu[iprime[i]*j]+=mu[j];
for(int i=1;i<=n;i++)
summu[i]+=summu[i-1];
}
long long f(int n,int m){
long long ans=0;
for(int l=1,r;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));
ans+=1LL*(summu[r]-summu[l-1])*(n/l)*(m/l);
}
return ans;
}
int main(){
prime(10000100);
scanf("%d",&T);
while(T--){
long long ans=0;
scanf("%d %d",&n,&m);
if(n<m)
swap(n,m);
ans+=f(n,m);
printf("%lld\n",ans);
}
return 0;
}

P2257 YY的GCD(莫比乌斯反演)的更多相关文章

  1. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  2. Luogu P2257 YY的GCD 莫比乌斯反演

    第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...

  3. 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...

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

    题意:求\[\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j) = prim]\] 题解:那就开始化式子吧!! \[f(d) = \sum_{i=1}^{n}\sum_{j=1 ...

  5. [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)

    [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...

  6. [Luogu P2257] YY的GCD (莫比乌斯函数)

    题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...

  7. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  8. BZOJ 2820 luogu 2257 yy的gcd (莫比乌斯反演)

    题目大意:求$gcd(i,j)==k,i\in[1,n],j\in[1,m] ,k\in prime,n,m<=10^{7}$的有序数对个数,不超过10^{4}次询问 莫比乌斯反演入门题 为方便 ...

  9. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

  10. 【BZOJ2820】YY的GCD(莫比乌斯反演 数论分块)

    题目链接 大意 给定多组\(N\),\(M\),求\(1\le x\le N,1\le y\le M\)并且\(Gcd(x, y)\)为质数的\((x, y)\)有多少对. 思路 我们设\(f(i)\ ...

随机推荐

  1. python之小数据池

    代码块 Python 程序 是由代码块构造的.块是一个python程序的文本,它是作为一个执行单元的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

  2. ext2文件系统的运行—superblock/inode/block

    鸟哥私房菜书上内容: superblock:记录此 filesystem 的整体信息,包括inode/block的总量.使用量.剩余量, 以及文件系统的格式与相关信息等:inode:记录文件的属性,一 ...

  3. [转载]基于UML的需求分析和系统设计(完整案例和UML图形演示)

    小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中有效地使用UML使之发挥应有的作用,怎样捕捉用户心中的需求并转 ...

  4. msyql -3m架构详解

    我们先来回顾一下mmm的概念,它是一套灵活的基于perl编写的脚本程序,自己本身不提供mysql服务的功能,它是用来对mysql replication 进行监控和故障迁移,并能管理mysql Mas ...

  5. C++ 开源库列表

    https://zh.cppreference.com/w/cpp/links/libs

  6. GoldenGate实时投递数据到大数据平台(1)-MongoDB

    mongodb安装 安装 linux下可使用apt-get install mongodb-server 或 yum install mongodb-server 进行安装. 也可以在windows上 ...

  7. 怎样从外网访问内网Oracle数据库?

    本地安装了一个Oracle数据库,只能在局域网内访问到,怎样从外网也能访问到本地的Oracle数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Oracle数据库 默认安装的Or ...

  8. win10系统jdk安装和环境变量配置

    新换电脑的原因,要重新安装jdk,完整记录一下安装过程 jdk版本用的1.7(公司默认版本) 这是jdk安装目录   更改为D:\jdk\java\jdk1.7 安装jre目录  更改为D:\jdk\ ...

  9. javascript 的01

    javaScript可以实现验证表单.制作特效等功能,JavaScript的目的主要是一下三点: 1 客户端表单验证2 页面动态效果3 jQuery的基础JavaScript是一种描述性语言,也是一种 ...

  10. ACM总结——2017湖南省省赛总结

    2017省赛已经结束了2天了,今天终于有时间,也有勇气来写下这一篇总结.的确,这是我第一次正式的ACM线下赛,我本以为再不济,也可以拿个三等奖,没想到,实力打铁.确实对我打击比较大,以前的确是知道自己 ...