在数论中,有很多题目都与莫比乌斯反演有关,最典型的就是最大公约数。比如你可以见到如下常见问题。
(1)已知
,求
为质数的
的对数,或者
等于1的
的对数。
(2)已知
和
,求
为质数的
的对数,或者
等于1的
的对数。
(3)已知
,求
的对数。
(4)已知
和
,求
的对数。
上面的问题其实都可以用莫比乌斯反演来解,时间复杂度都还可以。关于莫比乌斯反演,前面的文章中有详细介绍。
接下来,我们看一个关于莫比乌斯反演稍微复杂一点的题目。
题目:http://acm.fzu.edu.cn/problem.php?pid=2106
题意:给一个长度小于20的整数数组a[],有另外一个数组b[],满足条件
,求使得条件
成立的数组b[]的个数,结果对
取余。
分析:依据前面学的莫比乌斯反演,我们先设两个函数
和
。
为满足条件
的对数
为满足条件
的对数
那么,很明显有
,注意这里的
为
公共因子。
而
,反演后得到
在这里我们只考虑
为无平方因子的数即可。