BZOJ 2820 luogu 2257 yy的gcd (莫比乌斯反演)
题目大意:求$gcd(i,j)==k,i\in[1,n],j\in[1,m] ,k\in prime,n,m<=10^{7}$的有序数对个数,不超过10^{4}次询问
莫比乌斯反演入门题
为方便表述,由于n和m等价,以下内容均默认n<=m
题目让我们求:$\sum_{k=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)==k]$
容易变形为:$\sum_{k=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}[gcd(i,j)==1]$
很显然$gcd(i,j)==1$这个东西不太好处理,因为它是最大公约数,直接统计gcd的数量很困难
所以,根据莫比乌斯反演的常规套路:
把$gcd(i,j)==1$变形为$\sum _{d|gcd(i,j)}\mu(d)$
可得$\sum_{k=1}^{n}\sum_{i=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{k} \right \rfloor}\sum _{d|gcd(i,j)}\mu(d)$
此时,统计$d$的数量就很容易了,即$\left \lfloor \frac{n}{k} \right \rfloor\cdot \left \lfloor \frac{m}{k} \right \rfloor$,数学含义是"[1,n]中能整除d的数的数量*[1,m]中能整除d的数的数量"
继续变形$\sum_{k=1}^{n}\sum_{d=1}^{\left \lfloor \frac{n}{k} \right \rfloor}\left \lfloor \frac{n}{kd} \right \rfloor \cdot \left \lfloor \frac{m}{kd} \right \rfloor\cdot \mu(d)$
我们看kd这个东西很不爽,把它换掉,令Q=kd
$\sum_{Q}^{n}\left \lfloor \frac{n}{Q} \right \rfloor \cdot \left \lfloor \frac{m}{Q} \right \rfloor\cdot \sum_{k|Q,k\in prime}\mu(\frac{Q}{k})$
$\sum_{k|Q,k\in prime}\mu(\frac{Q}{k})$可以用线性筛筛出,将其命名为$g(i)$,再维护一个前缀和
在线性筛内分三种情况讨论,对于数i,我们遍历到了一个质数$p$,$i$中$p$的幂次为$k$
$k=0$,$i$中不含$p$,根据莫比乌斯函数的性质,$g(i\cdot p)=-g(i)+\mu(i)$,即$g/i$的部分全都反过来,再加上$p$带来的贡献
$k=1$,$i$中含一个$p$,那么在$p$加入后,除了$p$的其它质因子的贡献全部为0,仅计算$p$的贡献,即$g(i\cdot p)=g(i)$
$k>=2$,$i$中含两个$p$,加入$p$后,所有质因子的贡献均为0
而$\sum_{Q}^{n}\left \lfloor \frac{n}{Q} \right \rfloor \cdot \left \lfloor \frac{m}{Q} \right \rfloor$可以使用整除分块(套路的味道)在$O(\sqrt n)$的时间内算出来,再用前缀和统计即可
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 10010000
#define maxn 10000000
#define ll long long
using namespace std; int T,n,m,cnt;
int mu[N],pr[N],use[N],qm[N];
int pm[N]; void Pre()
{
mu[]=,qm[]=;
for(int i=;i<=maxn;i++)
{
if(!use[i]) pr[++cnt]=i,mu[i]=-,qm[i]=;
for(int j=;j<=cnt&&i*pr[j]<=maxn;j++){
use[i*pr[j]]=;
if(i%pr[j]==){
mu[i*pr[j]]=;
if((i/pr[j])%pr[j]==) qm[i*pr[j]]=;
else qm[i*pr[j]]=mu[i];
break;
}else{
mu[i*pr[j]]=-mu[i];
qm[i*pr[j]]=-qm[i]+mu[i];
}
}
}
for(int i=;i<=maxn;i++)
pm[i]=pm[i-]+qm[i];
}
ll solve(int n,int m)
{
ll ans=;//int nd,md;
for(int i=,la,mi=min(n,m);i<=mi;i=la+)
{
la=min(n/(n/i),m/(m/i));
ans+=1ll*(n/i)*(m/i)*(pm[la]-pm[i-]);
}
return ans;
}
int main()
{
scanf("%d",&T);
Pre();
for(int t=;t<=T;t++)
{
scanf("%d%d",&n,&m);
if(n>m) swap(n,m);
printf("%lld\n",solve(n,m));
}
return ;
}
BZOJ 2820 luogu 2257 yy的gcd (莫比乌斯反演)的更多相关文章
- 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 ...
- [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)有多少对. ...
- [Luogu P2257] YY的GCD (莫比乌斯函数)
题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1624 Solved: 853[Submit][Status][Discu ...
- bzoj 2820 YY的GCD 莫比乌斯反演
题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...
- BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)
手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- 【BZOJ2820】YY的GCD [莫比乌斯反演]
YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 求1<=x<=N, ...
随机推荐
- NOIP2018提高组省一冲奖班模测训练(五)
NOIP2018提高组省一冲奖班模测训练(五) http://www.51nod.com/Contest/ContestDescription.html#!#contestId=79 今天有点浪…… ...
- java的值传递与引用传递
一. 经常搞不清楚,当一个对象做为参数传入到方法中时,为啥有时候值能被改变,有时候又不会改变,以下说明原因: 1.当传入的参数,在方法中能被改变的为 引用传递 2.当传入的参数,在方法中没被改变的为 ...
- ZOJ 3229 Shoot the Bullet
Shoot the Bullet Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origin ...
- Matlab中的函数句柄@
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50699990 @是Matlab中的句柄 ...
- Cannot Allocate New Log
http://www.itpub.net/thread-1842569-1-1.html http://czmmiao.iteye.com/blog/2277675
- [Beginning SharePoint Designer 2010]Chapter5 主题和样式
本章概要: 1.什么是CSS 2.样式表的组成 3.如何管理CSS适应SPD的工具和特性 4.被SPS使用的关键的CSS类别 5.使用SPD应用样式到你的站点上
- SSD纠错码向LDPC码演变
作者:Stephen Bates SSD控制器芯片中採用的纠错编码(ECCs)的类型正在发生一场演变.相信很多这篇博文的读者对此都有所了解.传统上採用的纠错码是基于群变换的博斯-查德胡里-霍昆格母(B ...
- 基于QMP实现对qemu虚拟机进行交互
本文详解QMP,包含qmp.hmp.qemu-guest-agent的介绍.工作原理.配置方法.范例 小慢哥的原创文章,欢迎转载 目录 ▪ QMP介绍 ▪ QMP语法 ▪ 单独使用qemu,启用QMP ...
- C++ MAP使用
1. map的构造函数map<int,string> maphai;map<char,int> maphai;map<string,char> mapstring; ...
- Ubuntu14.04下Mongodb数据库可视化工具安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04下Mongodb官网安装部署步骤(图 ...