洛谷 P2257 YY的GCD



$ solution: $

这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路。

我们可以列出答案就是要我们求:

$ ans=\sum_{p\in prime}\sum_{i=1}{n}{\sum_{j=1}{m}{[gcd(i,j)==p]}} $

我们发现后面那一部分( $ \sum_{i=1}{n}{\sum_{j=1}{m}{[gcd(i,j)==p]}} $ )可以套路的莫比乌斯反演:

$ ans=\sum_{p\in prime}\sum_{i=1}{\frac{n}{p}}{\sum_{j=1}{\frac{m}{p}}{[gcd(i,j)==1]}} $

$ ans=\sum_{p\in prime}\sum_{i=1}{\frac{n}{p}}{\sum_{j=1}{\frac{m}{p}}{\sum_{k|gcd(i,j)}{\mu(k)}}} $

$ ans=\sum_{p\in prime}\sum_{k}{min(n,m)}{\mu(k)}{\sum_{i=1}{\frac{n}{p}}{\sum_{j=1}^{\frac{m}{p}}{[k|gcd(i,j)]}}} $

$ ans=\sum_{p\in prime}\sum_{k}^{min(n,m)}{\mu(k)\times \lfloor \frac{n}{p\times k} \rfloor \times \lfloor \frac{m}{p\times k} \rfloor} $

我们发现后面那两个东西有点麻烦,我们想办法让它变成常数项:

设: $ T=p\times k $

$ ans=\sum_{t=1}^{min(n,m)} \lfloor \frac{n}{T} \rfloor \times \lfloor \frac{m}{T} \rfloor \sum_{p|T,p\in prime} \mu{\frac{T}{p}} $

然后我们发现后面那一部分( $ \sum_{p|T,p\in prime} \mu{\frac{T}{p}} $ )可以预处理,然后我们在前面用整除分块,这样就可以每次只用 $ log(min(n,m)) $ 的时间完成单个询问了!



$ code: $

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define ll long long
#define db double
#define inf 0x7fffffff
#define rg register int using namespace std; const int N=1e7; ll ans;
int n,m,t;
int pr[10000005];
int mu[10000005];
int sum[10000005];
bool zhi[10000005]; inline int qr(){
register char ch; register bool sign=0; rg res=0;
while(!isdigit(ch=getchar())) if(ch=='-')sign=1;
while(isdigit(ch)) res=res*10+(ch^48),ch=getchar();
return sign?-res:res;
} inline void get_ready(){
mu[1]=1; int t=0;
for(rg i=2;i<=N;++i){
if(!zhi[i])pr[++t]=i,mu[i]=-1;
for(rg j=1;j<=t;++j){
if(i*pr[j]>N)break;
zhi[i*pr[j]]=1;
if(!(i%pr[j]))break;
mu[i*pr[j]]=-mu[i];
}
}
for(rg i=1;i<=t;++i)
for(rg j=1;j*pr[i]<=N;++j)
sum[j*pr[i]]+=mu[j];
for(rg i=1;i<=N;++i) sum[i]+=sum[i-1];
} int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
t=qr(); get_ready();
while(t--){ ans=0;
n=qr(); m=qr();
rg x=min(n,m),l,r;
for(l=1;l<=x;l=r+1){
r=min(n/(n/l),m/(m/l));
ans+=(ll)(n/l)*(m/l)*(sum[r]-sum[l-1]);
}printf("%lld\n",ans);
}
return 0;
}

洛谷 P2257 YY的GCD的更多相关文章

  1. 洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块

    https://www.luogu.org/problemnew/show/P2257 求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数 求 $\sum\limits_p \sum ...

  2. 洛谷 P2257 YY的GCD 题解

    原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...

  3. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

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

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

  5. 洛谷P2257 YY的GCD

    今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...

  6. 洛谷P2257 YY的GCD(莫比乌斯反演)

    传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...

  7. 解题:洛谷2257 YY的GCD

    题面 初见莫比乌斯反演 有一个套路是关于GCD的反演经常设$f(d)=\sum_{gcd(i,j)==d},g(d)=\sum_{d|gcd(i,j)}$,然后推推推 $\sum\limits_{i= ...

  8. [洛谷2257]YY的GCD 题解

    整理题目转化为数学语言 题目要我们求: \[\sum_{i=1}^n\sum_{i=1}^m[gcd(i,j)=p]\] 其中 \[p\in\text{质数集合}\] 这样表示显然不是很好,所以我们需 ...

  9. 洛谷 2257 - YY的GCD

    莫比乌斯反演半模板题 很容易可以得到 \[Ans = \sum\limits_{p \in prime} \sum\limits_{d = 1}^{\min (\left\lfloor\frac{a} ...

随机推荐

  1. Gitblit 的安装使用

    1.下载gitblit,可以网上下载,也可以在下面云盘链接取 gitblit-1.8.0  下载链接:https://pan.baidu.com/s/1x7dnbyDp1FmYjMosJbGR8w 密 ...

  2. docker--命令详解

    查看版本: docker --version 查看docker信息: docker info 进入容器: docker exec -it bb /bin/bash #在容器中执行一个bash可以操作容 ...

  3. 关于mysql的压测sysbench

    测试表格:CREATE TABLE `sbtest` ( `id` int(10) unsigned NOT NULL auto_increment, `k` int(10) unsigned NOT ...

  4. MT【16】证明无理数(2)

    证明:$sin10^0$为无理数. 分析:此处用$sin$的三倍角公式,结合多项式有有理根必须满足的系数之间的关系可以证明. 评:证明$sin9^0$为无理数就不那么简单.思路:先利用$sin54^0 ...

  5. Python入门基础之循环

    如果计算机不能循环,那么它比人还笨,实际上它也确实比人笨.你之所以觉得计算机好厉害,是因为它快,guangzhoushenbo.com计算机可以在1秒钟内重复做一件事情成千上万次. Python学习交 ...

  6. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  7. 【转】用emWin进度条控件做个表盘控件,效果不错

    @2018-08-09 用emWin进度条控件做个表盘控件,效果不错

  8. yml实例

    producer.yml apiVersion: v1kind: Podmetadata:name: producer-consumerspec:containers:- image: busybox ...

  9. windows安装redis的正确姿势

    安装: 1,redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/ServiceStack/redis-wind ...

  10. 【bzoj1797】 Ahoi2009—Mincut 最小割

    http://www.lydsy.com/JudgeOnline/problem.php?id=1797 (题目链接) 题意 求一条边是否可能在一个最小割集中,以及这条边是否一定在最小割集中. Sol ...