luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)
整理的算法模板合集: ACM模板
题目传送门
- f(n)f(n)f(n)表示规定范围内gcd(x,y)=ngcd(x,y)=ngcd(x,y)=n的数对个数
- F(n)F(n)F(n)表示规定范围内公约数包括 nnn 的数对个数(即 n∣gcdn|gcdn∣gcd的数对个数),也可以写成F(t)=F(t)=F(t)=满足gcd(x,y)%n==0gcd(x,y)\%n==0gcd(x,y)%n==0的数对个数
F(n)=∑n∣kf(k)F(n)=\sum_{n|k}f(k)F(n)=n∣k∑f(k)
然后我们就需要找到一个求解F(n)F(n)F(n) 的方法即可。
然后我们就可以发现答案实际上就是:f(d)f(d)f(d)。
f(d)=∑d∣kμ(⌊kd⌋)F(k)f(d)=\sum_{d|k}\mu(\lfloor\frac{k}{d}\rfloor)F(k)f(d)=d∣k∑μ(⌊dk⌋)F(k)
时间复杂度为O(n)O(n)O(n)我们再利用整除分块将时间复杂度降到O(n)O(\sqrt{n})O(n)。我们直接枚举 ttt,也就是说 lll 就是 ttt。
因为区间lll到rrr的值都相同,所以我们使用整除分块,利用前缀和直接求莫比乌斯函数这一段的和。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstring>using namespace std;
typedef long long ll;
const int N = 50007, M = 50007, INF = 0x3f3f3f3f;
const double eps = 1e-6;int n, m;
int vis[N];
int cnt, mu[N], prime[N];
int sum[N];void get_mu(int n)
{memset(vis, 0, sizeof vis);memset(mu, 0, sizeof mu);cnt = 0, mu[1] = 1;for(int i = 2; i <= n; ++ i){if(!vis[i]){prime[cnt ++ ] = i;mu[i] = -1;}for(int j = 0; j < cnt && prime[j] * i <= n; ++ j){vis[prime[j] * i] = true;if(i % prime[j] == 0)break;mu[i * prime[j]] = - mu[i];}}for(int i = 1; i <= n; ++ i){sum[i] = sum[i - 1] + mu[i];}
}int main()
{get_mu(5e4 + 7);scanf("%d", &n);while(n -- ){int a, b, d;ll ans = 0;scanf("%d%d%d", &a, &b, &d);
// l 从一定要1开始!从0开始的话就会 除0 直接RE
//要保证l <= min(a, b)因为一旦t大于a,就会除0(l就是枚举的t,t=k/d)for(int l = 1, r; l <= min(a, b); l = r + 1){r = min(a / (a / l), b / (b / l));ans += 1ll * (a / (l * d)) * (b / (l *d)) * (sum[r] - sum[l - 1]);}printf("%lld\n", ans);}
}
luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)相关推荐
- 欧拉函数+狄利克雷卷积+莫比乌斯函数+莫比乌斯反演+整除分块+杜教筛
Powered by:NEFU AB-IN 文章目录 欧拉函数 狄利克雷卷积 莫比乌斯函数 莫比乌斯反演 P3455 [POI2007]ZAP-Queries 整除分块 P2522 [HAOI2011 ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块) 手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csd ...
- Luogu P6055 [RC-02] GCD(莫比乌斯反演,杜教筛)(这题乐死我了,真就图一乐呗)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P6055 Prob ...
- Luogu P3455 [POI2007]ZAP-Queries
由于之前做了Luogu P2257 YY的GCD,这里的做法就十分套路了. 建议先看上面一题的推导,这里的话就略去一些共性的地方了. 还是和之前一样设: \[f(d)=\sum_{i=1}^a \su ...
- P2522 HAOI2011 Problem b [莫比乌斯反演,数论分块]
P2522 HAOI2011 题意 对于给出的n个询问,每次求有多少个数对(x,y)(x,y)(x,y),满足a≤x≤ba≤x≤ba≤x≤b,c≤y≤dc≤y≤dc≤y≤d,且gcd(x,y)=kgc ...
- HDU 6833 莫比乌斯反演 + 数论分块
给定下列式子: ∑a1=1n∑a2=1n...∑ax=1n(∏j=1xajk)f(gcd(a1,a2...,ax))⋅gcd(a1,a2...,ax)\sum_{a_1=1}^n\sum_{a_2 ...
- 数论 —— 莫比乌斯反演
[反演] 假设我们手头有个数列 F,通过某种变换 H,可以得到函数 G.,即: 但现在只有函数 G,需要求 F,那么我们就需要寻找一种变换 ,使得 G 在经过这种变换后能够获得 F,这个过程即为反演, ...
- 【专题】莫比乌斯反演
问题引入: 给定整数 N 和 M.求满足 且 为质数的点对 的个数. 数据范围: 接下来会见到以下内容: 莫比乌斯函数 莫比乌斯函数的线性筛 迪利克雷卷积介绍 莫比乌斯反演 整除分块 杜教筛介绍 ...
- P2257 YY的GCD (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...
最新文章
- 【5】python核心编程 第八章-条件和循环
- php扩展-ioncube组件的安装方法_Windows系统PHPStudy Web环境安装ionCube扩展软件
- LeetCode 1049. 最后一块石头的重量 II
- 关于jasmine里debugElement.query和fixture.detectChanges的依赖关系
- urllib2.urlopen超时问题
- LeetCode之Two Sum
- 蓝桥杯基础模块4_3:矩阵按键
- Python 利用*args和**kwargs解决函数遇到不确定数量参数问题
- 2021-02-23 天地图图层类型总结
- python学习手册(1)
- PYQT5:基于QsciScintilla的代码编辑器分析10--语法高亮颜色选择
- 苹果电脑打不开网页连接不到服务器,苹果电脑chrome打不开网页怎么办_MAC上的chrome打不开网页如何解决-win7之家...
- Badboy录制提示脚本错误解决方案
- {*zoom:1;}作用
- 计算机上海交大考研有学硕吗,2021上海交大考研:学硕专硕的区别
- Latest - 2021 - 08 Giuhub Access
- tonybot 人形机器人 首次开机 0630
- ES 文件浏览器安全漏洞分析(CVE-2019-6447)
- A股行业投资指南——好的投资,首先是选好行业
- 佳能打印机复印身份证的双面到A4纸上的方法
热门文章
- 深度学习100问:什么是深监督(Deep Supervision)?
- 轻松学Pytorch – 年龄与性别预测
- 基础 | 深度学习与神经网络-介绍
- Python中的数据结构
- 浅谈RNN,LSTM和GRU
- sqoop数据迁移的应用
- MyGeneration学习笔记(1) : 使用MyGeneration生成存储过程和数据访问层代码
- windows 2012 exchange server 2013 搭建
- [转][android深入学习]android窗口管理机制
- 【python教程入门学习】Django应用开发框架的优点和缺点!!