在集合 $[n]$ 上使用容斥原理。

固定 $i$,考虑有多少个 $j \in [n]$ 满足 $\gcd(i, j) = \gcd(a_i, a_j) = 1$,将此数目记作 $f_i$。暂时不考虑条件 $ i \le j $ 。

考虑 $[n]$ 的某些子集。$S_{x,y} := \{ i\in [n] \colon x\mid i, y \mid a_i \}$

以 $a_6 = 4$ 为例,$6$ 的素因子有 $2, 3$,$4$ 的素因子有 $2$ 。

考虑集合 $S_{1, 2}, S_{2, 1}, S_{2, 2}, S_{3, 1}, S_{3, 2}$,对这些集合用容斥原理(即求出 $[n]$ 中【不属于这些集合中的任一集合】的元素有多少个)即可求得 $f_i$ 。

在对 $S_1, S_2, \dots, S_n$ 用容斥原理时,若 $S_i \subset S_j$($i\ne j$)则可将 $S_i$ 去掉。

注意到 $S_{3,2}, S_{2, 2}$ 都是 $S_{1, 2}$ 的子集,所以有些子集是不用考虑的。实际上我们考虑
$S_{1, 2}, S_{2, 1}, S_{3, 1}$ 即可。

将 $i$ 的素因子个数记作 $c_i$。求解 $f_i$ 需要计算 $2^{c_i + c_{a_i} }$ 个集合的基数。

机械地采用容斥原理其实做了很多重复计算。

容斥原理涉及求一些集合的交集的基数,这些交集可表为 $S_{x, y}$ 其中 $x, y$ 都是若干个素数的乘积。

设 $A, B$ 为一些质数的集合,$p_A, p_B$ 分别为其中元素的乘积($p_{\emptyset} = 1$)。以下也将 $S_{p_A,p_B}$ 写作 $S_{A,B}$ 。

在使用容斥原理时我们实际上是要求 $|S_{A,B}|$,注意到 $|S_{A,B}|$ 每次出现,其系数都是 $-1^{|A|+|B|}$,故我们考虑 $|S_{A,B}|$ 出现了多少次。易见,$|S_{A,B}|$ 出现在 $f_i$ 的表达式中当且 $p_A\mid i$ 且 $p_B \mid a_i$,故 $|S_{A,B}|$ 出现了 $|S_{A,B}|$ 次。因此有
\begin{equation}
\sum_i f_i = \sum_{A,B} (-1)^{|A|+|B|} |S_{A,B}|^2
\end{equation}

\begin{equation}
|S_{A,B}| =\sum_i [p_A|i,\,p_B|a_i] = \sum_{k} [p_B \mid a_{kp_A}]
\end{equation}
于是
\begin{equation}
\sum_i f_i = \sum_{A,B} (-1)^{|A|+|B|} \left( \sum_{k} [p_B \mid a_{kp_A}] \right)^2 \label{E:3}
\end{equation}
借助 Möbius 函数,\eqref{E:3} 可写成
\begin{equation}
\sum_i f_i = \sum_{x}\mu(x) \sum_y \mu(y) \left( \sum_{k} [y \mid a_{kx}] \right)^2
\end{equation}

计算方法:枚举 $x$,枚举 $k$,枚举 $y$($y$ 是 $kx$ 的因子),为每个 $\mu(y)\ne 0$ 的 $y$ 维护一个计数器,并将这些 $y$ 放入一个列表。

hihoCoder #1867 GCD的更多相关文章

  1. HihoCoder - 1867: GCD (莫比乌斯容斥)

    Sample Input 6 1 6 2 5 3 4 Sample Output 10 You are given a {1, 2, ..., n}-permutation a[1], a[2], . ...

  2. ACM学习历程—Hihocoder 1177 顺子(模拟 && 排序 && gcd)(hihoCoder挑战赛12)

      时间限制:6000ms 单点时限:1000ms 内存限制:256MB   描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种 ...

  3. hihocoder #1177 : 顺子 模拟

    #1177 : 顺子 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1177 ...

  4. hihocoder 1077线段树

    http://hihocoder.com/problemset/problem/1077 #include <bits/stdc++.h> using namespace std; #de ...

  5. hihoCoder #1037 : 数字三角形 (动态规划)

    题目链接:https://hihocoder.com/problemset/problem/1037# 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋 ...

  6. hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]

    题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他 ...

  7. 2017北京网络赛 Bounce GCD加找规律

    题目链接:http://hihocoder.com/problemset/problem/1584 题意:就是求一个小球从矩阵的左上角,跑到矩形的右下角不能重复经过的格子,小球碰到墙壁就反射. 解法: ...

  8. HihoCoder 1473 : 小Ho的强迫症( 欧几里得 )

    描述 小Ho在一条笔直的街道上散步.街道上铺着长度为L的石板,所以每隔L距离就有一条石板连接的缝隙,如下图所示. 小Ho在散步的时候有奇怪的强迫症,他不希望脚踩在石板的缝隙上.(如果小Ho一只脚的脚尖 ...

  9. hihoCoder 1584 Bounce 【数学规律】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)

    #1584 : Bounce 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 For Argo, it is very interesting watching a cir ...

随机推荐

  1. 【转】IOS开发网络篇之──ASIHTTPRequest详解

    ASIHTTPRequest 详解, http 请求终结者 版权归旺财勇士所有〜转载需声名〜 原贴地地址:http://wiki.magiche.net/pages/viewpage.action?p ...

  2. OO2019第四单元作业总结

    一.本单元两次作业的架构设计  1.第一次作业 第一次作业由于时间仓促,没有过多的架构设计,就直接补全了所给的MyUmlInteraction类,导致整个程序的代码风格和效率都不高,在强测中也因此失掉 ...

  3. React后台管理系统-rich-editor组件

    1.Simditor组件的github地址:https://github.com/mycolorway/simditor 网址:http://simditor.tower.im/ 2.在util里边新 ...

  4. JT∕T 905 -2014 出租汽车服务管理信息系统的相关协议研究

    出租汽车服务管理信息系统(JT∕T 905 -2014) 国家的相关技术要求2014年7月正式出台,总体有四部分,   第 1 部分:总体技术要求:   第 2 部分:运营专用设备:   第 3 部分 ...

  5. Angular2的笔记

    1.如果启动项目的时候出现下列黄色的警告说明电脑安装的全局cli和项目中使用的cli版本不一致,不过不影响使用,按它的提示执行 ng set --global warnings.versionMism ...

  6. C# DateTime的使用

    获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = DateTime ...

  7. C++ 容器与继承

    如果容器类型定义为基类类型,那么虽然可以把派生类装进容器中,但是不能通过容器访问派生类自己的public成员,派生类将会倍切掉,只保留派生类的基类部分: 如果把容器定义为派生类类型,那么不能把基类类型 ...

  8. ElasticSearch High Level REST API【4】多搜索

    1.Multi-Search多搜索请求 Multi-Search可同时添加多个search搜索请求,并行地在一个http请求中执行多个搜索请求,相较多次单请求查询可提升查询效率.ES客户掉通过mget ...

  9. Java - 静态方法不具有多态性

    class A1 { public static void f() {  System.out.println("A1.f()"); }}class A2 extends A1 { ...

  10. Spring的datasource配置详解【转】

    一句话,Spring对Hibernate的整合,是在applicationContext.xml中配置sessionFactory来实现的,其中sessionFactory中要装配dataSource ...