题目

P3455 [POI2007]ZAP-Queries

解析

莫比乌斯反演。

给定\(n\),\(m\),\(d\),求$$\sum_{i=1}{n}\sum_{j=1}{m}[gcd(i,j)=d]$$

那我们设$$f(x)=\sum_{i=1}{n}\sum_{j=1}{m}[gcd(i,j)=x]$$

\[\begin{aligned}
F(x)=& \sum_{x\mid i}f(k) \\Q
=&\sum_{x\mid k}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=k]\\
&当gcd(i,j)=k且x\mid i时,会对答案做一次贡献;\\
&所以只要枚举gcd(i,j),当x\mid (k=gcd(i,j))时,会对答案做一次贡献\\
=&\sum_{i=1}^{n}\sum_{j=1}^{m}[x\mid gcd(i,j)]\\
&\because x\mid gcd(i,j)\\
&\therefore x\mid i且x\mid j\\
=&\sum_{i=1}^{\frac{n}{x}}\sum_{j=1}^{\frac{m}{x}}[1\mid gcd(i,j)]\\
=&\lfloor \frac{n}{x}\rfloor \lfloor\frac{m}{x}\rfloor
\end{aligned}
\]

实在看不懂的话其实也可以这么理解,根据\(gcd\)的性质,发现\(F\)实际上就是在求有多少个\(ij\)都是\(x\)的倍数,\(1\)到\(n\)里有\(\lfloor\dfrac{n}{x}\rfloor\)个,\(1\)到\(m\)里有\(\lfloor\dfrac{m}{x}\rfloor\)个,根据乘法原理,就是\(\lfloor\dfrac{n}{x}\rfloor\lfloor\dfrac{m}{x}\rfloor\)。

然后直接反演

\[\begin{aligned}
F(x)=& \sum_{x\mid i}f(i) \\
f(x)=&\sum_{x\mid i}\mu(\frac{i}{x})F(i)\\
=&\sum_{x\mid i}\mu(\frac{i}{x})\lfloor \frac{n}{i}\rfloor \lfloor\frac{m}{i}\rfloor
\end{aligned}
\]

将\(d\)带入

\[\begin{aligned}
f(x)=\sum_{d\mid i}\mu(\frac{i}{d})\lfloor \frac{n}{i}\rfloor \lfloor\frac{m}{i}\rfloor
\end{aligned}
\]

令\(\dfrac{i}{d}=t\),得到

\[\begin{aligned}
f(d)=\sum_{t=1}^{min(a,b)}\mu(t)\lfloor \frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor
\end{aligned}
\]

这样就做到了\(O(n)\)的做,最后套一个数论分块,就可以\(O(m\sqrt n)\)的做这道题

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int t, n, m, d, num, mx, ans;
int mu[N], p[N], sum[N];
bool vis[N]; template<class T>inline void read(T &x) {
x = 0; int f = 0; char ch = getchar();
while (!isdigit(ch)) f |= (ch == '-'), ch = getchar();
while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
x = f ? -x : x;
return;
} void get_mu(int n) {
mu[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!vis[i]) p[++num] = i, mu[i] = -1;
for (int j = 1; j <= num; ++j) {
if (i * p[j] > n) break;
vis[i * p[j]] = 1;
if (i % p[j] == 0) {
mu[i * p[j]] = 0;
break;
} else mu[i * p[j]] = -mu[i];
}
}
} int main() {
get_mu(N);
for (int i = 1; i <= N; ++i) sum[i] = sum[i - 1] + mu[i];
read(t);
while (t--) {
ans = 0;
read(n), read(m), read(d);
mx = min(n, m);
for (int l = 1, r; l <= mx; l = r + 1) {
r = min(n / (n / l), m / (m / l));
ans += ((n / (l * d)) * (m / (l * d)) * (sum[r] - sum[l - 1]));
}
printf("%d\n", ans);
}
return 0;
}

P3455 [POI2007]ZAP-Queries(莫比乌斯反演)的更多相关文章

  1. 【BZOJ】1101 [POI2007]Zap(莫比乌斯反演)

    题目 传送门:QWQ 分析 莫比乌斯反演. 还不是很熟练qwq 代码 //bzoj1101 //给出a,b,d,询问有多少对二元组(x,y)满足gcd(x,y)=d.x<=a,y<=b # ...

  2. BZOJ1101 POI2007 Zap 【莫比乌斯反演】

    BZOJ1101 POI2007 Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b, ...

  3. 【BZOJ1101】[POI2007] Zap(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^M[gcd(x,y)==d]\). 一道类似的题目 推荐先去做一下这道题:[洛谷2257]YY的GCD,来初步了解一下莫比乌 ...

  4. 洛谷P3455 [POI2007]ZAP-Queries (莫比乌斯反演)

    题意:求$\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)==d]$(1<=a,b,d<=50000). 很套路的莫比乌斯反演. $\sum_{i=1}^{n}\ ...

  5. 洛谷P3455 [POI2007]ZAP-Queries(莫比乌斯反演)

    传送门 设$$f(k)=\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)=k]$$ $$g(n)=\sum_{n|k}f(k)=\lfloor\frac{a}{n}\rflo ...

  6. BZOJ 1101 [POI2007]Zap(莫比乌斯反演)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1101 [题目大意] 求[1,n][1,m]内gcd=k的情况 [题解] 考虑求[1,n ...

  7. P3455 [POI2007]ZAP-Queries(莫比乌斯反演)

    思路 和YY的GCD类似但是更加简单了 类似的推一波公式即可 \[ F(n)=\sum_{n|d}f(d) \] \[ f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d) \] \ ...

  8. ☆ [POI2007] ZAP-Queries 「莫比乌斯反演」

    题目类型:莫比乌斯反演 传送门:>Here< 题意:求有多少对正整数对\((a,b)\),满足\(0<a<A\),\(0<b<B\),\(gcd(a,b)=d\) ...

  9. [luogu3455][POI2007]ZAP-Queries【莫比乌斯反演】

    题目描述 FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得 ...

  10. 【BZOJ】1101: [POI2007]Zap(莫比乌斯+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1101 无限膜拜数论和分块orz 首先莫比乌斯函数的一些性质可以看<初等数论>或<具 ...

随机推荐

  1. JMeter中文返回乱码

    JMeter中文返回乱码 结果树响应数据中文返回乱码 其实有几个方法: 在线程组->http请求的字符集里设置 ​ 在http 消息管理头中设置 ​ 3.如果以上方法还没有解决,请打开安装目录 ...

  2. 关于使用阿里OSS服务搭建图床和使用PicGO上传图片到图床

    最近喜欢上了使用markdown来写博客,可是markdown的图片却是本地的,如果我要发博客,那么又要重复截图了.于是干脆弄了个图床,本地截图的时候上传到图床,markdown中的代码结果也是图床里 ...

  3. MySQL 修改账号的IP限制条件

    今天遇到一个需求:修改MySQL用户的权限,需要限制特定IP地址才能访问,第一次遇到这类需求,结果在测试过程,使用更新系统权限报发现出现了一些问题, 具体演示如下. 下面测试环境为MySQL 5.6. ...

  4. Spring MVC 数据绑定 (四)

    完整的项目案例: springmvc.zip 目录 实例 项目结构路径: 一.配置web.xml <?xml version="1.0" encoding="UTF ...

  5. VS2017 EF本地数据库链接

    1. 本地数据库连接 server name可以从链接字符串中取: (localdb)\MSSQLLocalDB 注意少写一个\. { "Logging": { "Inc ...

  6. 深入理解Mysql索引的底层数据结构 B+ Tree (1)

    关键字的个数等于路的个数减1. 一个二叉树节点可以存储4kb大小的数据,假如关键字是整型的一个关键字占用4byte,其他数据冗余4个字节 4 kb = 4*1024 byte = 4096 byte. ...

  7. php+qrcode类+生成二维码方法

    //生成二维码 public function qrcode() { $data = input(); if(!$data['param']){ return json(['code ' => ...

  8. 微信小程序测试方法总结

    最近的新项目是小程序加web端后台管理 主要找了些文章方便自己使用也分享给大家: 小程序官方文档 https://developers.weixin.qq.com/miniprogram/design ...

  9. C++调用Opencv实践中遇到的问题备忘录

    1.编写一个显示图片的项目,但显示的图片全灰色. 原因:需要在imshow()函数前加一个namedWindow()函数.https://blog.csdn.net/mao_hui_fei/artic ...

  10. 通过ip查询自己电脑的共享文件夹

    查看电脑所有的共享文件或文件夹的三种方法如下: 方法一. 右键点击网上邻居,点击属性进入网上邻居属性页面. 选中本地连接,在窗口的左下方有详细信息,可以看到内网IP,记住IP地址. 直接在地址栏输入记 ...