洛谷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}\rfloor\lfloor\frac{b}{n}\rfloor$$
根据莫比乌斯反演定理可以推出$$f(n)=\sum_{n|k}\mu(\lfloor\frac{k}{n}\rfloor)g(k)$$
那么可以发现$ans=f(d)$
然后用推出来的结论带进去
$$ans=\sum_{d|k}\mu(\lfloor\frac{k}{d}\rfloor)g(k)$$
枚举$\lfloor\frac{k}{d}\rfloor$设为$t$
$$ans=\sum_{t=1}^{min(\lfloor\frac{a}{d}\rfloor,\lfloor\frac{b}{d}\rfloor)}\mu(t)\lfloor\frac{a}{td}\rfloor\lfloor\frac{b}{td}\rfloor$$
对于$\lfloor\frac{a}{td}\rfloor\lfloor\frac{b}{td}\rfloor$相同的一段我们可以直接用前缀和算出答案
总而言之就是先预处理出$\mu$的前缀和然后用整除分块,那么每一次询问的复杂度就是$O(\sqrt{n})$
//minamoto
#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=6e5+;
int p[N],mu[N],vis[N],m,sum[N];ll ans,lim;
void init(int n){
mu[]=;
for(int i=;i<=n;++i){
if(!vis[i]) mu[i]=-,p[++m]=i;
for(int j=;j<=m&&p[j]*i<=n;++j){
vis[i*p[j]]=;
if(i%p[j]==) break;
mu[i*p[j]]=-mu[i];
}
}
for(int i=;i<=n;++i) sum[i]=sum[i-]+mu[i];
}
int main(){
// freopen("testdata.in","r",stdin);
int n,m,T,d;scanf("%d",&T);
init();
while(T--){
scanf("%d%d%d",&n,&m,&d);ans=;
lim=min(n/d,m/d); for(int l=,r;l<=lim;l=r+){
r=min(n/(n/l),m/(m/l));
ans+=1ll*(n/(l*d))*(m/(l*d))*(sum[r]-sum[l-]);
}
printf("%lld\n",ans);
}
return ;
}
洛谷P3455 [POI2007]ZAP-Queries(莫比乌斯反演)的更多相关文章
- 洛谷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}\ ...
- 洛谷 P3455 [POI2007]ZAP-Queries (莫比乌斯函数)
题目链接:P3455 [POI2007]ZAP-Queries 题意 给定 \(a,b,d\),求 \(\sum_{x=1}^{a} \sum_{y=1}^{b}[gcd(x, y) = d]\). ...
- 【BZOJ1101】[POI2007] Zap(莫比乌斯反演)
点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^M[gcd(x,y)==d]\). 一道类似的题目 推荐先去做一下这道题:[洛谷2257]YY的GCD,来初步了解一下莫比乌 ...
- 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)
洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- 【BZOJ】1101 [POI2007]Zap(莫比乌斯反演)
题目 传送门:QWQ 分析 莫比乌斯反演. 还不是很熟练qwq 代码 //bzoj1101 //给出a,b,d,询问有多少对二元组(x,y)满足gcd(x,y)=d.x<=a,y<=b # ...
- BZOJ1101 POI2007 Zap 【莫比乌斯反演】
BZOJ1101 POI2007 Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b, ...
- [洛谷P1390]公约数的和·莫比乌斯反演
公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...
- 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...
随机推荐
- linux撤销命令
u撤销上一步操作 ctrl+r恢复上一步被撤销的操作
- 测试drawable animation
public class DAActivity extends Activity implements OnClickListener { private ImageView iv_da_mm; pr ...
- A Pangram
Codeforces Round #295 div2 的A题,题意是判读一个字符串是不是全字母句,也就是这个字符串是否包含了26个字母,无论大小写. Sample test(s) input 12 t ...
- iOS本地数据存取,看这里就够了
本文授权转载,作者:hosea_zhou(简书) 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2) ...
- dojo 官方翻译 dojo/_base/lang 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#dojo-base-lang 应用加载声明: require ...
- Delphi-WebService(53)
Delphi-WebService(53) http://blog.csdn.net/qq56430204/article/details/4875770 Delphi Web Services程序
- webpack热替换原理
前期准备: const path = require('path'); const HtmlWebpackPlugin= require('html-webpack-plugin'); const C ...
- 分享知识-快乐自己:Mybatis缓存机制
论缓存机制: 1):mybatis 提供了缓存机制减轻数据库压力,提高数据库性能. 2):mybatis 的缓存分为两级:一级缓存.二级缓存 3):一级缓存是SqlSession级别的缓存,缓存的数据 ...
- c# 实现WebSocket
用C# ASP.NET MVC 实现WebSocket ,对于WebSocket想必都很了解了,不多说. 东西做的很粗糙 只能实现基本的聊天功能,不过基本的通信实现了,那么后序的扩展应该也不难(个人这 ...
- 常见css兼容问题
链接的虚线框问题 <!-- html --> <a class="noDashedBox" href="#"><img src=& ...