题目大意

有至多\(10000\)组询问,问\(1 < i \leqslant N \leqslant 10000000, 1 < j \leqslant M \leqslant 10000000\),并且\(gcd(i, j)\)为质数的有多少对。

解题思路

为了方便描述,我们定义\([]\),当\([]\)中表达式为真时为\(1\),否则为\(0\)。同时定义\(Prime\)为素数集合。

下面的讨论中,我们不妨设\(N \leqslant M\)。

我们设

\[f(d)=\sum_{i=1}^M\sum_{j=1}^N[gcd( i, j ) \in Prime]\\
F(n)=\sum_{n|d}^Nf(d)=\lfloor\frac{M}{n}\rfloor\lfloor\frac{N}{n}\rfloor
\]

即,\(f(d)\)是当\(gcd=d\)时的答案数,\(F(n)\)是当\(gcd\)为\(n\)的倍数时的答案数。

我们发现,求\(F(n)\)十分的方便,于是我们考虑能否通过\(F(n)\)将\(f(n)\)表述出来。

由莫比乌斯反演,得

\[f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)
\]

其中\(\mu\)是莫比乌斯函数。

那么答案就可以表示为

\[\begin{aligned}
Ans & = \sum_{n\in Prime}^Nf(n)\\
& = \sum_{n\in Prime}^N\sum_{n|d}\mu(\frac{d}{n})F(d)\\
& = \sum_{n\in Prime}^N\sum_{n|d}\mu(\frac{d}{n})\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor\\
& = \sum_{d}^N\sum_{n|d,n\in Prime}\mu(\frac{d}{n})\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor\\
& = \sum_{d}^N\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor\sum_{n|d, n\in Prime} \mu(\frac{d}{n})
\end{aligned}
\]

通过稍微修改线筛,我们可以与处理出\(\mu\),然后可以预处理出所有的\(\sum_{n|d,n\in Prime}\mu(\frac{d}{n})\)。最后再整除分块统计答案就可以了。

参考程序

程序中,mu即为\(\mu\),\(Sum\)为前缀和。

#include <bits/stdc++.h>
using namespace std; const int MaxN = 10000010;
int Mu[ MaxN ], Vis[ MaxN ];
long long Sum[ MaxN ];
int Num, Prime[ 1000010 ]; void Init() {
Mu[ 1 ] = 1;
for( int i = 2; i <= MaxN; ++i ) {
if( !Vis[ i ] ) Prime[ ++Num ] = i, Mu[ i ] = -1;
for( int j = 1; j <= Num && ( long long ) i * Prime[ j ] <= ( long long ) MaxN; ++j ) {
Vis[ i * Prime[ j ] ] = 1;
if( i % Prime[ j ] == 0 ) break;
Mu[ i * Prime[ j ] ] = - Mu[ i ];
}
}
for( int i = 1; i <= MaxN; ++i )
for( int j = 1; j <= Num && ( long long ) i * Prime[ j ] <= ( long long ) MaxN; ++j )
Sum[ i * Prime[ j ] ] += Mu[ i ];
for( int i = 2; i <= MaxN; ++i ) Sum[ i ] += Sum[ i - 1 ];
return;
} void Work() {
int N, M;
scanf( "%d%d", &N, &M );
if( N > M ) swap( N, M );
long long Ans = 0;
for( int x = 1, y; x <= N; x = y + 1 ) {
y = min( N / ( N / x ), M / ( M / x ) );
Ans += 1LL * ( N / x ) * ( M / x ) * ( Sum[ y ] - Sum[ x - 1 ] );
}
printf( "%lld\n", Ans );
return;
} int main() {
Init();
int T; scanf( "%d", &T );
for( ; T; --T ) Work();
return 0;
}

YY的GCD【luoguP2257】的更多相关文章

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

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

  2. [BZOJ2820]YY的GCD

    [BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

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

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

  4. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

  5. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  6. 【BZOJ 2820】 YY的GCD (莫比乌斯+分块)

    YY的GCD   Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  7. 【BZOJ2820】YY的GCD(莫比乌斯反演)

    [BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...

  8. YY的GCD

    YY的GCD 给出T个询问,询问\(\sum_{i=1}^N\sum_{j=1}^M(gcd(i,j)\in prime)\),T = 10000,N, M <= 10000000. 解 显然质 ...

  9. 洛谷【P2257】YY的GCD

    YY的GCD 原题链接 这应该是我做的第一道莫比乌斯反演的题目. 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x ...

  10. 【BZOJ2820】YY的GCD

    [BZOJ2820]YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的( ...

随机推荐

  1. nodejs+gulp+webpack基础知识

    nodejs+gulp+webpack基础知识 2019年08月22日 11:49:40 天府云创 阅读数 22   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文 ...

  2. Centos7.3安装Mysql5.7.26(glibc即linux通用版)

    1.检查防火墙是否关闭 //查看防火墙状态 firewall-cmd --state //关闭防火墙 systemctl stop firewalld systemctl disable firewa ...

  3. 怎样解决在执行 vue init 时提示 "vue : 无法加载文件" 的问题?

    注意, 以下操作需要 以管理员身份 在 PowerShell 中进行, 不能是 CMD / Git Bash 等. 1. 以 管理员身份 运行 PowerShell 2. 执行 get-Executi ...

  4. 16-Perl 文件操作

    1.Perl 文件操作Perl 使用一种叫做文件句柄类型的变量来操作文件.从文件读取或者写入数据到文件需要使用文件句柄.文件句柄(file handle)是一个I/O连接的名称.Perl提供了三种文件 ...

  5. XVS 操作

    1. xvs安装   rpm -i  ***.rpm 2.获取license root@ubuntu:/usr/local/xvs# ./xvs -L .Host ID: 16b3d720584704 ...

  6. 配置lombok到eclipse上去

    使用maven导入lombok.jar包,可以帮助我们省略掉getter/setting方法. 1.pom.xml 添加依赖: <dependency> <groupId>or ...

  7. 第二卷 第一章 伪IOC容器--羊墅

    写在前面: Spring自诞生起,就被人称作“万能胶”,核心服务就是解耦 ,随着Spring5的出现,已经形成一个生态,被人称作spring全家桶,而且逐步在去serlvet化,去tomcat化,大有 ...

  8. ORA-01145: offline immediate disallowed unless media recovery enabled问题解决

    ORA-01145: offline immediate disallowed unless media recovery enabled (随记,后续整理) 数据库只有在归档模式下才能够直接对数据文 ...

  9. 安装openblas库

    http://www.openblas.net/ Linux:下载源码直接make即可

  10. 海康RTSP取流URL格式

    预览取流url [海康威视]举例说明: 主码流取流: rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream 子码流取流: rtsp://a ...