数对统计

题目链接:ybt金牌导航8-7-1

题目大意

给你 n,m,求 gcd(x,y)=1 的数对个数。
1<=x<=n,1<=y<=m

思路

莫比乌斯函数

什么东西

首先我们要知道莫比乌斯函数是个什么鬼东西。

首先,我们先不管莫比乌斯函数,先来看一个函数:F(n)=∑d∣nf(d)F(n)=\sum_{d|n}f(d)F(n)=∑d∣n​f(d)
(假设 f(d)f(d)f(d) 是一个给出的函数)

那根据定义,我们可以先弄一下:
F(1)=f(1)F(1)=f(1)F(1)=f(1)
F(2)=f(1)+f(2)F(2)=f(1)+f(2)F(2)=f(1)+f(2)
F(3)=f(1)+f(3)F(3)=f(1)+f(3)F(3)=f(1)+f(3)
F(4)=f(1)+f(2)+f(4)F(4)=f(1)+f(2)+f(4)F(4)=f(1)+f(2)+f(4)
F(5)=f(1)+f(5)F(5)=f(1)+f(5)F(5)=f(1)+f(5)
F(6)=f(1)+f(2)+f(3)+f(6)F(6)=f(1)+f(2)+f(3)+f(6)F(6)=f(1)+f(2)+f(3)+f(6)
F(7)=f(1)+f(7)F(7)=f(1)+f(7)F(7)=f(1)+f(7)
F(8)=f(1)+f(2)+f(4)+f(8)F(8)=f(1)+f(2)+f(4)+f(8)F(8)=f(1)+f(2)+f(4)+f(8)

那我们考虑用 F(n)F(n)F(n) 来推 f(n)f(n)f(n)
f(1)=F(1)f(1)=F(1)f(1)=F(1)
f(2)=F(2)−F(1)f(2)=F(2)-F(1)f(2)=F(2)−F(1)
f(3)=F(3)−F(1)f(3)=F(3)-F(1)f(3)=F(3)−F(1)
f(4)=F(4)−F(2)f(4)=F(4)-F(2)f(4)=F(4)−F(2)
f(5)=F(5)−F(1)f(5)=F(5)-F(1)f(5)=F(5)−F(1)
f(6)=F(6)−F(3)−F(2)+F(1)f(6)=F(6)-F(3)-F(2)+F(1)f(6)=F(6)−F(3)−F(2)+F(1)
f(7)=F(7)−F(1)f(7)=F(7)-F(1)f(7)=F(7)−F(1)
f(8)=F(8)−F(4)f(8)=F(8)-F(4)f(8)=F(8)−F(4)

那我们会发现,它只会由它因数的 FFF 值加减或者不要组成。

那我们可以把它弄成这样的形式:
f(n)=∑d∣nμ(d)F(nd)f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})f(n)=∑d∣n​μ(d)F(dn​)

那我们的莫比乌斯函数 μ(d)\mu(d)μ(d) 就出现了!

定义

  1. 如果 d=1d=1d=1,那 μ(d)=1\mu(d)=1μ(d)=1
  2. 如果 d=p1p2...pkd=p_1p_2...p_kd=p1​p2​...pk​,pip_ipi​ 是互不相同的素数,那就会有 μ(d)=(−1)k\mu(d)=(-1)^kμ(d)=(−1)k
  3. 如果不满足上面两个条件,那 μ(d)=0\mu(d)=0μ(d)=0

如何求

首先,我们可以很明显的看出用定义法求会比较慢,尤其是要求一个区间的。

我们可以考虑用类似 DP 的方法求。

看到跟素数有关,自然想到先用欧拉筛求。
然后我们可以考虑,在欧拉筛枚举最小质因子的时候,我们可以想到你处理 i×primeji\times prime_ji×primej​ 这个数。
那我们想 primejprime_jprimej​ 的 μ\muμ 值已经求出,那我们可以看这个最小的质因子是否已经是 primejprime_jprimej​ 的因子(就是能否整除)。
如果能整除,那就说明这个质数有两个,那就直接 μi×primej=0\mu_{i\times prime_j}=0μi×primej​​=0,那否则就是多一个素数,就是 μi×primej=μi×−1\mu_{i\times prime_j}=\mu_{i}\times-1μi×primej​​=μi​×−1。

你会想,啊,如果原来 primejprime_jprimej​ 已经有一个素数能分解出两个或以上呢?
那因为这样,它的 μ\muμ 值就一定是 000,就算乘了 −1-1−1,也还是 000,就没有问题了。

一些性质

  1. ∑d∣nμ(d)={1n=10n>1\sum_{d|n}\mu(d)=\left\{\begin{matrix} 1\ \ n=1\\ 0\ \ n>1 \end{matrix}\right.∑d∣n​μ(d)={1  n=10  n>1​
  2. φ(n)=∑d∣nμ(d)×nd\varphi(n)=\sum_{d|n}\dfrac{\mu(d)\times n}{d}φ(n)=∑d∣n​dμ(d)×n​

关于这道题

我们考虑利用第一条性质:
ans=∑i=1n∑j=1m[gcd(i,j)=1]ans=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)=1]ans=i=1∑n​j=1∑m​[gcd(i,j)=1]

ans=∑i=1n∑j=1m[gcd⁡(i,j)=1]=∑i=1n∑j=1m∑d∣gcd⁡(i,j)μ(d)=∑i=1n∑j=1m∑d∣i,d∣jμ(d)=∑d∑i=1,d∣in∑j=1,d∣jmμ(d)=∑dμ(d)⋅⌊nd⌋⋅⌊md⌋\begin{aligned} ans &= \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[\gcd(i,j)=1]\\ &= \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{d|\gcd(i,j)}\mu(d)\\ &= \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{d|i,d|j}\mu(d)\\ &= \sum\limits_{d}\sum\limits_{i=1,d|i}^{n}\sum\limits_{j=1,d|j}^{m}\mu(d)\\ &= \sum\limits_{d}\mu(d)\cdot\left \lfloor \frac{n}{d} \right \rfloor\cdot\left \lfloor \frac{m}{d} \right \rfloor \end{aligned}ans​=i=1∑n​j=1∑m​[gcd(i,j)=1]=i=1∑n​j=1∑m​d∣gcd(i,j)∑​μ(d)=i=1∑n​j=1∑m​d∣i,d∣j∑​μ(d)=d∑​i=1,d∣i∑n​j=1,d∣j∑m​μ(d)=d∑​μ(d)⋅⌊dn​⌋⋅⌊dm​⌋​

然后这就是 O(n)O(n)O(n) 的,但是因为它是多次询问,每个询问都是 O(n)O(n)O(n),就还是过不了。

然后看到向下取整,自然想到整除分块。
那就前缀和 μ\muμ 函数,然后就整除分块处理就好了。

代码

#include<cstdio>
#include<iostream>
#define ll long longusing namespace std;ll T;
ll n, m;
ll miu[100001], prime[100001];
ll qz[100001];
bool np[100001];void get_miu() {//同欧拉筛预处理 μmiu[1] = 1;for (int i = 2; i <= 100000; i++) {if (!np[i]) {prime[++prime[0]] = i;miu[i] = -1;}for (int j = 1; j <= prime[0] && 1ll * i * prime[j] <= 100000ll; j++) {np[i * prime[j]] = 1;if (i % prime[j] == 0) {miu[i * prime[j]] = 0;break;}else miu[i * prime[j]] = miu[i] * -1;}}
}void get_qz() {//前缀和for (int i = 1; i <= 100000; i++)qz[i] = qz[i - 1] + miu[i];
}void work(int n, int m) {ll ans = 0;for (int l = 1; l <= n && l <= m; ) {int r = min(n / (n / l), m / (m / l));//数论分块加速ans += (qz[r] - qz[l - 1]) * (n / l) * (m / l);l = r + 1;}printf("%lld\n", ans);
}int main() {get_miu();get_qz();scanf("%lld", &T);while (T--) {scanf("%lld %lld", &n, &m);work(n, m);}return 0;
}

【ybt金牌导航8-7-1】数对统计 / 关于莫比乌斯函数的少量内容相关推荐

  1. 【ybt金牌导航8-3-3】【luogu P4593】分数计算 / 教科书般的亵渎(数学)(拉格朗日插值)

    分数计算 / 教科书般的亵渎 题目链接:ybt金牌导航8-3-3 / luogu P4593 题目大意 有一些怪,血量从 1~n,其中有 m 个数是没有怪的,给出这些数. 然后你可以每次操作攻击所有怪 ...

  2. 【ybt金牌导航2-3-3】【luogu P3975】K小子串 / 弦论

    K小子串 / 弦论 题目链接:ybt金牌导航2-3-3 / luogu P3975 题目大意 给你一个字符串,要你求字典序第 k 小的子串. (相同的子串可能算一个,也可能算多个,数据以读入 0/1 ...

  3. 【luogu P4036】【ybt金牌导航4-5-3】火星人

    火星人 题目链接:luogu P4036 / ybt金牌导航4-5-3 题目大意 给你一个字符串,要你维护三个东西. 修改字符串的一个字符,往字符串的一个地方插入一个字符,询问两个后缀的最长公共前缀. ...

  4. 【ybt金牌导航4-7-3】【luogu P3437】三维俄罗斯方块/TET-Tetris 3D

    三维俄罗斯方块/TET-Tetris 3D 题目链接:ybt金牌导航4-7-3 / luogu P3437 题目大意 要你支持区间求最大,并把这个区间的所有点高度改为你求得的最大值加一个值. 最后要你 ...

  5. 【ybt金牌导航3-6-3】【luogu P3007】奶牛议会 / The Continental Cowngress G(两种方法)

    奶牛议会 / The Continental Cowngress G 题目链接:ybt金牌导航3-6-3 / luogu P3007 题目大意 有一些人,每个人对众多决案中的两个决案有表示好或不好. ...

  6. 【ybt金牌导航3-2-1】【luogu P3376】网络最大流【Dinic算法】

    网 络 最 大 流 网络最大流 网络最大流 题目链接:ybt金牌导航3-2-1 / luogu P3376 题目 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数 ...

  7. P4318,bzoj2440-完全平方数【二分答案,莫比乌斯函数,容斥】

    正题 题目链接: https://www.luogu.org/problem/P4318 https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题 ...

  8. 【莫队】区间不同数(金牌导航 莫队-1)

    区间不同数 金牌导航 莫队-1 题目大意 给出n个数,然后询问m次,每次询问一个区间内不同的数的个数 样例输入 6 1 2 3 4 3 5 3 1 2 3 5 2 6 样例输出 2 2 4 数据范围 ...

  9. 【DP】【树状数组】折线统计(金牌导航 数据结构优化DP-1)

    正题 金牌导航 数据结构优化DP-1 题目大意 平面上有n个点,让你选择若干点,连接x坐标相邻的点,其中连续上升或下降的为一段,问你有多少中选择方案,使得段数为k 解题思路 设fi,j,0/1f_{i ...

最新文章

  1. redis 6379端口telnet不通的解决办法
  2. java - 通用 CRUD(增、删、改、查)工具类,代码高效复用
  3. PHP逻辑运算符如何写,PHP 逻辑运算符
  4. 《天天数学》连载36:二月五日
  5. 系统调用----sandir
  6. beautifulsoup_如何使用 Python 和 BeautifulSoup 爬取网站
  7. sqlserver2008r2 还原bak文件
  8. ACR122U-A9|ACR1251|ACM1252系列NFC读写器读卡器PCSC Tool测试工具使用步骤说明
  9. 时间序列分析 23 DTW (时序相似度度量算法) 上
  10. 获取微信开放平台申请移动应用时的应用签名和应用包名
  11. 玩转Linux与运维岗(21)
  12. 坐落尘世的繁华,幽眉清黛任花开花谢
  13. 微信小程序iOS系统上echarts不能滑动的问题
  14. 【图像增强】基于Step和Polynomial 滤波实现图像增强附matlab代码
  15. 圣诞节购物季:我们可以花加密货币购买礼物
  16. Python基础教程第七章学习笔记——更加抽象
  17. 基于微博的网络安全事件检测
  18. linux杀毒软件clamav安装
  19. 切入万亿家居市场,国美是要充当“逆袭者”还是“搅局者”?
  20. 2022年最流行的自动化测试工具有哪些?全网最全最细都在这里了

热门文章

  1. 适合2015年开发的10个新锐框架(上)
  2. mockito的用法
  3. nlp中文本相似度匹配
  4. Java基本计算方法
  5. 机器自动翻译古文拼音 - 将进酒拼音版本,译文拼音版本
  6. 成都榆熙:商家怎样提升店铺自然流量?
  7. java程序当当网购书系统怎么运行_Java实现基于控制台的购书系统基本操作
  8. Traefik v2.9-IngressRoute
  9. LYL程序员小白的理解之简单易懂的Arduino的串口通讯
  10. 半导体物理——PN结