题目:

洛谷2257

预备知识:莫比乌斯定理(懵逼乌斯定理)

\(\mu*1=\epsilon\)(证bu明hui略zheng)

其中(我校学长把\(\epsilon(x)\)叫单位函数但是为什么我没百度到qwq)

\[\epsilon(x)=\begin{cases}1 & x=1\\
0 & x\neq1\\
\end{cases}\]

\[\mu(x)=\begin{cases}1 & x=1\\
0 & 存在质数p使p^2|x\\
(-1)^k & k是x质因数的个数 \end{cases}\]

那个\(*\)是迪利克雷卷积,换成人话就是

\[\epsilon(n)=\sum_{d|n}\mu(d)
\]

我觉得用这种方式理解莫比乌斯定理比设两个函数容易

分析:

这题莫比乌斯定理的经典用例。

本文中默认\(N>M\)

默认\(p\)是质数

显然如果\(gcd(i,j)=p\),那么\(gcd(\frac{i}{p}, \frac{j}{p})=1\)

那么题目所求可以转换成下面的式子

\[\sum_{p}^N\sum_i^{N/p}\sum_j^{M/p}\epsilon(gcd(i,j))
\]

其中(我校学长把这个叫单位函数但是我没百度到qwq)

\[\epsilon(x)=\begin{cases}1 & x=1\\
0 & x\neq1\\
\end{cases}\]

根据莫比乌斯反演定理,上面的式子就可以变成

\[\sum_{p=2}^N\sum_i^{N/p}\sum_j^{M/p}\sum_{d|gcd(i,j)}\mu(d)
\]

改变一下枚举顺序,用\(d·i\)表示原来的\(i\),\(d·j\)表示原来的\(j\),得到

\[\sum_{p=2}^N\sum_d^{N/p}\sum_i^{N/pd}\sum_j^{M/pd}\mu(d)
\]

可以发现\(\mu(d)\)和\(i\)、\(j\)没半毛钱关系,仅仅是乘上\(i\)和\(j\)可以取的值的数量

也就是

\[\sum_{p=2}^N\sum_d^{N/p}\mu(d)*\lfloor\frac{N}{pd}\rfloor*\lfloor\frac{M}{pd}\rfloor
\]

令\(T=pd\),枚举T,上式可变成

\[\sum_T^N\sum_{p|T}\mu(\frac{T}{p})*\lfloor\frac{N}{T}\rfloor*\lfloor\frac{M}{T}\rfloor
\]

设$$g(x)=\sum_{p|x}\mu(\frac{x}{p})$$

则上式就是

\[\sum_T^N\lfloor\frac{N}{T}\rfloor*\lfloor\frac{M}{T}\rfloor*g(T)
\]

现在考虑如何求\(g(x)\)这个函数。

首先,对于任意质数\(p\),显然\(g(p)=\mu(1)=1\)

然后,对于任意合数\(n=kp_0\)(\(p_0\)是质数)\(g(n)\)中显然存在\(\mu(\frac{n}{p_0})\)也就是\(\mu(k)\)这一项

当\({p_0}|k\),也就是\(p_0^2|n\),对于任意\(p|k\)且\(p\neq p_0\),\(\mu(\frac{n}{p})\)中一定有\(p_0^2\)这个质数平方因子。根据\(\mu(x)\)的定义,\(\mu(\frac{n}{p})=0\)

所以此时\(g(n)=\mu(k)\)

当\(p_0\)不能整除\(k\),对于任意\(p|k\),\(\mu(\frac{n}{p})\)比\(\mu(\frac{k}{p})\)多了\(p_0\)这个质因子。根据\(\mu(x)\)的定义\(\mu(\frac{n}{p})=-\mu(\frac{k}{p})\)

所以此时\(g(n)=-g(k)+\mu(k)\)

总结一下

\[g(x)=\begin{cases}1 & x是质数\\
\mu(k) & x=kp且p能整除k\\
-g(k)+\mu(k) & x=kp且p不能整除k
\end{cases}\]

显然这个函数可以用线性筛求

\[\sum_T^N\lfloor\frac{N}{T}\rfloor*\lfloor\frac{M}{T}\rfloor*g(T)
\]

再来看这个式子,既然\(g(T)\)可以直接预处理并\(O(1)\)查询,那么计算这个式子的时间复杂度就是枚举\(T\)的复杂度\(O(N)\)

我会做啦!

别急,这题还有\(T\)组询问,所以复杂度是O(不可过)\(O(NT)\),这个过不了。

但是我们可以发现\(\lfloor\frac{N}{T}\rfloor*\lfloor\frac{M}{T}\rfloor\)在\(T\)的一段区间内是不变的,所以可以给\(g(T)\)算个前缀和然后分段计算,据说复杂度是\(O(\sqrt N T)\)的(我不会证),这样就可以过了

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; namespace zyt
{
typedef long long ll;
const int N = 1e7 + 10, M = 7e5;
bool mark[N];
int cnt, prime[M], phi[N], mu[N];
ll g[N];
void init()
{
mu[1] = 1;
for (int i = 2; i < N; i++)
{
if (!mark[i])
prime[cnt++] = i, mu[i] = -1, g[i] = 1;
for (int j = 0; j < cnt && (ll)i * prime[j] < N; j++)
{
int k = i * prime[j];
mark[k] = true;
if (i % prime[j] == 0)
{
mu[k] = 0;
g[k] = mu[i];
break;
}
else
{
mu[k] = -mu[i];
g[k] = -g[i] + mu[i];
}
}
}
for (int i = 2; i < N; i++)
g[i] += g[i - 1];
}
void work()
{
int T;
init();
scanf("%d", &T);
while (T--)
{
int n, m, pos = cnt;
ll ans = 0;
scanf("%d%d", &n, &m);
if (n > m)
swap(n, m);
for (int t = 1; t <= n;)
{
int tmp = min(n / (n / t), m / (m / t));
ans += (g[tmp] - g[t - 1]) * (n / t) * (m / t);
t = tmp + 1;
}
printf("%lld\n", ans);
}
}
}
int main()
{
zyt::work();
return 0;
}

【洛谷2257/BZOJ2820】YY的GCD(数论/莫比乌斯函数)的更多相关文章

  1. 【洛谷2257】YY的GCD(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^MIsPrime(gcd(x,y))\). 莫比乌斯反演 听说此题是莫比乌斯反演入门题? 一些定义 首先,我们可以定义\(f ...

  2. BZOJ2820 YY的GCD 【莫比乌斯反演】

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

  3. LOJ #2185 / 洛谷 P3329 - [SDOI2015]约数个数和(莫比乌斯函数)

    LOJ 题面传送门 / 洛谷题面传送门 题意: 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\),\(d(x)\) 为 \(x\) 的约数个数. \( ...

  4. 洛谷 P2257 【YY的GCD】

    这道题还是和上一道[ZAP]有那么一点点的相似哈 题目大意 给定N, M,求1<=x<=N, 1<=y<=M且\(gcd(x, y)\)为质数的(x, y)有多少对 如果对莫比 ...

  5. 【洛谷P2257】YY的GCD

    题目大意:有 \(T\) 个询问,每个询问给定 \(N, M\),求 \(1\le x\le N, 1\le y\le M\) 且 \(gcd(x, y)\) 为质数的 \((x, y)\) 有多少对 ...

  6. BZOJ 2820 YY的GCD(莫比乌斯函数)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2820 题意:给定n,m.求1<=x<=n, 1<=y<=m且Gc ...

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

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

  8. [BZOJ2820]YY的GCD

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

  9. BZOJ2820 YY的GCD 莫比乌斯+系数前缀和

    /** 题目:BZOJ2820 YY的GCD 链接:http://www.cogs.pro/cogs/problem/problem.php?pid=2165 题意:神犇YY虐完数论后给傻×kAc出了 ...

随机推荐

  1. str类型内置方法

    目录 str类型内置方法 用途 定义方式 常用操作和内置方法 优先掌握 需要掌握 了解 存一个值or多个值 有序or无序 可变or不可变 强化训练 str类型内置方法 用途 字符串数字.字母.下划线组 ...

  2. 51nod1429 巧克力

    [题解] 找一下两个面积s1,s2的2和3的因子数,把他们除掉,如果s1,s2不相等,就是-1,否则可以用s1,s2的2和3的因子数计算答案. #include<cstdio> #incl ...

  3. RequestMapping_Ant 路径

    [使用@RequestMapping映射请求] [Ant风格资源地址支持3种匹配符] (1)? :匹配文件名中的一个字符. (2) * :匹配文件名中的任意字符. (3) ** :**匹配多层路径. ...

  4. HDU 4451 容斥原理

    题目大意: n件衣服,m条裤子,k双鞋子进行搭配 妈妈指明了哪些衣服和裤子不能搭配,哪些裤子和鞋子不能搭配,问最后有几种搭配方法 先假设都能搭配 n*m*k 每次遇到衣服和裤子不能搭的,就要减一次k, ...

  5. code wars quiz: toInteger

    Your task is to program a function which converts any input to an integer. Do not perform rounding, ...

  6. Oracle中的 row_number() over (partition by order by ) 用法

    oracle 里面经常这样用 select col1,col2..., row_number() over (partition by colx order by coly) from table_n ...

  7. JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系

    转载请注明出处:http://blog.csdn.net/xyang81/article/details/42047899 当我们在调用一个Java native方法的时候.方法中的參数是怎样传递给C ...

  8. GDIPlus绘制桌面歌词

    功能介绍 採用GDIPlus绘制桌面歌词,相似酷狗.QQ音乐等软件.歌词支持纯色.两色渐变.三色渐变:支持高亮歌词. 实现方法 窗体部分:桌面歌词是个独立的背景透明窗体.能够移动位置,能够鼠标穿透.透 ...

  9. Java Web开发基础(1)-Servlet

    概述 Servlet技术是对webserver的扩展,要理解这个,可能先了解一下什么是Webserver以及它的功能,特别是它的不足是非常有帮助的,可參考:点击打开链接.另外.Servlet也是一个用 ...

  10. C 基础 全局变量

    /** 被static修饰的局部变量 1.只有一份内存, 只会初始化一次 2.生命周期会持续到程序结束 3.static改变了局部变量的生命周期, 但是不能改变局部变量的作用域 被static修饰的全 ...