原题链接

差不多算自己推出来的第一道题QwQ

题目大意

\(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少\((x,y)\)满足\(gcd(x,y)\in \mathbb{P}\)

数据范围

\(T=10000\),\(1\leqslant N,M\leqslant 10000000\)

显然,暴力不可做。

这种公约数计数的题貌似大多都是用莫比乌斯反演做的?套路啊,套路。

首先,我们先很套路地设一个函数\(f(n)\)(方括号的意思是,若里面的表达式为真,则值为\(1\),否则为\(0\)),

$f(n)=\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[gcd(i,j)==n]$
然后,我们再很套路的设一个函数$F(n)$,并定义
$F(n)=\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{M}[n|gcd(i,j)]$
由乘法原理,易得$F(n)=\left \lfloor \frac{N}{n} \right \rfloor \left \lfloor \frac{M}{n} \right \rfloor$。然后,由$f(n)$和$F(n)$的定义,显然有$F(n)=\sum\limits_{n|d}f(d)$
反演一波,得到
$f(n)=\sum\limits_{n|d}\mu (\frac{d}{n})F(d)$
接下来就是简(ma)单(fan)的化简环节了,令答案为$A$,可得
$A=\sum\limits_{p\in\mathbb{P}}f(p)=\sum\limits_{p\in\mathbb{P}}\sum\limits_{p|d}\mu (\frac{d}{p})F(d)$
令$t=\frac{d}{p}$,代入并继续化简
$A=\sum\limits_{p\in\mathbb{P}}\sum\limits_{t=1}^{min\{\left \lfloor \frac{N}{p} \right \rfloor,\left \lfloor \frac{M}{p} \right \rfloor\}}\mu (t)F(pt)=\sum\limits_{p\in\mathbb{P}}\sum\limits_{t=1}^{min\{\left \lfloor \frac{N}{p} \right \rfloor,\left \lfloor \frac{M}{p} \right \rfloor\}}\mu (t)\left \lfloor \frac{N}{pt} \right \rfloor \left \lfloor \frac{M}{pt} \right \rfloor$
令$T=pt$,代入
$A=\sum\limits_{p\in\mathbb{P}}\sum\limits_{p|T}^{min\{N,M\}}\mu (\frac{T}{p})\left \lfloor \frac{N}{T} \right \rfloor \left \lfloor \frac{M}{T} \right \rfloor$
交换和号,推出
$A=\sum\limits_{T=1}^{min\{N,M\}}\sum\limits_{p\in\mathbb{P},p|T}\mu (\frac{T}{p})\left \lfloor \frac{N}{T} \right \rfloor \left \lfloor \frac{M}{T} \right \rfloor$
将$\left \lfloor \frac{N}{T} \right \rfloor \left \lfloor \frac{M}{T} \right \rfloor$提到前面,化简到最终式子
$A=\sum\limits_{T=1}^{min\{N,M\}}\left \lfloor \frac{N}{T} \right \rfloor \left \lfloor \frac{M}{T} \right \rfloor\sum\limits_{p\in\mathbb{P},p|T}\mu (\frac{T}{p})$
终于写完了,巨长的$L^AT_EX$
观察式子,后面的一部分可以用前缀和搞定,前面的就是整除分块的拿手好戏了。注意,因为$N,M$的值可能不同,所以每次更新$r$的值时,要取$r=min\{\frac{N}{\left \lfloor \frac{N}{l} \right \rfloor},\frac{M}{\left \lfloor \frac{M}{l} \right \rfloor}\}$
其他的看代码吧:
``` cpp
#include

using namespace std;

define N 10000000

int T, n, m, cnt, ans, mu[N+5], sum[N+5], vis[N+5], prime[N+5];

void get_mu(int lim) {

mu[1] = 1, vis[1] = 1;

for(int i = 2; i <= lim; ++i) { //筛素数时计算μ函数

if(!vis[i]) prime[++cnt] = i, mu[i] = -1;

for(int j = 1; j <= cnt && iprime[j] <= lim; ++j) {

vis[i
prime[j]] = 1;

if(i%prime[j] == 0) break;

else mu[iprime[j]] = -mu[i];

}

}

for(int j = 1; j <= cnt; ++j)

for(int i = 1; i
prime[j] <= lim; ++i)

sum[i*prime[j]] += mu[i];

for(int i = 1; i <= lim; ++i) sum[i] += sum[i-1];//计算前缀和

}

void init() {

cin >> T;

get_mu(N);

}

int main() {

init();

while(T--) {

cin >> n >> m;

long long ans = 0; //要开long long

int t = min(n, m);

for(int l = 1, r; l <= t; l = r+1) {

r = min(n/(n/l), m/(m/l));

ans += 1LL(n/l)(m/l)*(sum[r]-sum[l-1]); //就是最后推出的那个式子

}

cout << ans << endl;

}

return 0;

}

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

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

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

  2. 洛谷 P2257 YY的GCD

    洛谷 P2257 YY的GCD \(solution:\) 这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路. 我们可以列出答案就是要我们求: \(ans ...

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

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

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

    传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...

  5. 洛谷 P2257 YY的GCD 题解

    原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...

  6. 洛谷P2257 YY的GCD

    今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...

  7. 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 ...

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

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

  9. [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)有多少对. ...

随机推荐

  1. [Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  2. Kafka相关内容总结(概念和原理)

    说明 主要内容是在网上的一些文章中整理出来: 加粗的字体是比较重要的内容,部分是自己的经验和理解: 整理的目的主要是为了方便查阅: 为什么需要消息系统 解耦: 在项目启动之初来预测将来项目会碰到什么需 ...

  3. jenkins自动化工具使用教程(转)

    自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 DevOps自动化运维流行 集群化,高可 ...

  4. [RHEL 6]GPT分区--parted

    对于2T以上的硬盘,划分分区表需要GPT分区,RHEL 6中使用parted进行分区 用法:parted [选项]... [设备 [命令 [参数]...]...] 将带有“参数”的命令应用于“设备”. ...

  5. 研究好vif 和vshow

    另外从源头上处理的???,怎么自己排查出错误??必须 ??https://www.jb51.net/article/124116.htm

  6. perf + Flame Graph火焰图分析程序性能

    1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...

  7. 微信小程序设置域名、不校验域名

    设置--项目设置 将不校验域名勾上就可以了,不再校验域名了通过 url: 'https://localhost:8443/spring4/user/list.do',就可以访问后台了. 若要配置域名则 ...

  8. Go语言中定时器cron的基本使用

    安装:go get github.com/robfig/cron  如果出不去就用gopm 例子: package main import ( "fmt" "github ...

  9. 【转】Android OkHttp3简介和使用详解

    一 OKHttp简介 OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpC ...

  10. C# 使用微软自带的Speech进行语音输出

    1.在VS中使用微软自带的Speech进行语音播报,首先需要添加引用: 2.具体实现逻辑代码如下: