题目大意:求$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 (莫比乌斯反演)的更多相关文章

  1. 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 ...

  2. [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)有多少对. ...

  3. [Luogu P2257] YY的GCD (莫比乌斯函数)

    题面 传送门:洛咕 Solution 推到自闭,我好菜啊 显然,这题让我们求: \(\large \sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)\in prime]\) 根 ...

  4. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

  5. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  6. bzoj 2820 YY的GCD 莫比乌斯反演

    题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...

  7. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...

  8. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  9. 【BZOJ2820】YY的GCD [莫比乌斯反演]

    YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 求1<=x<=N, ...

随机推荐

  1. [Noi2002]Savage

    [Noi2002]Savage 数学题. 题解回去写(有个坑点) flag++ #include <cstdio> int n,m,c[25],p[29],l[29]; int exgcd ...

  2. 【Codeforces Round #507 (Div. 2, based on Olympiad of Metropolises) B】Shashlik Cooking

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 翻转一次最多影响2k+1个地方. 如果n<=k+1 那么放在1的位置就ok.因为能覆盖1..k+1 如果n<=2k+1 ...

  3. redis 在 Linux 和 Windows 上的安装配置

    最近需要在服务器上安装 redis,虽然只是一个小事情,但这个过程中也遇到了不少的问题,所以做一个总结,也希望能给到其他人一些帮助. 本文记录了 linux 系统和 windows 系统的 redis ...

  4. xml01 验证

    xml 验证 拥有正确的格式的xml是"形势良好"的xml 通过DTD验证的xml是"合法的"xml

  5. Google NewSQL之Spanner

    谷歌分布式三宝 BigTable.GFS.MapReduce这传说中的谷歌分布式三驾马车,虽然谷歌没有公开具体实现代码,但却公布了相应论文,对分布式文件系统.大数据挖掘和NoSQL流行起了重大促进作用 ...

  6. 【LeetCode-面试算法经典-Java实现】【120-Triangle(三角形)】

    [120-Triangle(三角形)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a triangle, find the minimum path s ...

  7. 写一个函数,输入int型,返回整数逆序后的字符串

    刚刚看到一个面试题:写一个函数,输入int型,返回整数逆序后的字符串.如:输入123,返回"321". 要求必须用递归,不能用全局变量,输入必须是一个參数.必须返回字符串.&quo ...

  8. jQuery验证所有输入合法后才干提交

    大学三年里所有在专注后台编码.学会不知多少种,servlet.ssh,springMVC,web.py...... 最后每次碰到前端自己要写点东西就满目愁抑, 干脆自己好好理解一段前端代码, 特地拿出 ...

  9. CSDN--十年

    昨天获得了博客专家的勋章,惊喜总是来的有点意外.这个勋章也算是来的一波三折.借着这个机会,回首一下我在CSDN的博客历史. 这个博客如今可查的最早的文章,是04年下半年写的,事实上之前应该另一些自己写 ...

  10. 数据挖掘算法之-关联规则挖掘(Association Rule)(购物篮分析)

    在各种数据挖掘算法中,关联规则挖掘算是比較重要的一种,尤其是受购物篮分析的影响,关联规则被应用到非常多实际业务中,本文对关联规则挖掘做一个小的总结. 首先,和聚类算法一样,关联规则挖掘属于无监督学习方 ...