hihoCoder #1867 GCD
在集合 $[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的更多相关文章
- 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], . ...
- ACM学习历程—Hihocoder 1177 顺子(模拟 && 排序 && gcd)(hihoCoder挑战赛12)
时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 你在赌场里玩梭哈,已经被发了4张牌,现在你想要知道发下一张牌后你得到顺子的概率是多少? 假定赌场使用的是一副牌,四种 ...
- hihocoder #1177 : 顺子 模拟
#1177 : 顺子 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1177 ...
- hihocoder 1077线段树
http://hihocoder.com/problemset/problem/1077 #include <bits/stdc++.h> using namespace std; #de ...
- hihoCoder #1037 : 数字三角形 (动态规划)
题目链接:https://hihocoder.com/problemset/problem/1037# 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋 ...
- hihocoder 1330 - 数组重排 - [hiho一下167周][最小公倍数]
题目链接:https://hihocoder.com/problemset/problem/1330 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi想知道,如果他 ...
- 2017北京网络赛 Bounce GCD加找规律
题目链接:http://hihocoder.com/problemset/problem/1584 题意:就是求一个小球从矩阵的左上角,跑到矩形的右下角不能重复经过的格子,小球碰到墙壁就反射. 解法: ...
- HihoCoder 1473 : 小Ho的强迫症( 欧几里得 )
描述 小Ho在一条笔直的街道上散步.街道上铺着长度为L的石板,所以每隔L距离就有一条石板连接的缝隙,如下图所示. 小Ho在散步的时候有奇怪的强迫症,他不希望脚踩在石板的缝隙上.(如果小Ho一只脚的脚尖 ...
- hihoCoder 1584 Bounce 【数学规律】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1584 : Bounce 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 For Argo, it is very interesting watching a cir ...
随机推荐
- 【BZOJ2809】[APIO2012] dispatching(左偏树例题)
点此看题面 大致题意: 有\(N\)名忍者,每名忍者有三个属性:上司\(B_i\),薪水\(C_i\)和领导力\(L_i\).你要选择一个忍者作为管理者,然后在所有被他管理的忍者中选择若干名忍者,使薪 ...
- 【51nod1705】七星剑(成环DP)
点此看题面 大致题意: 你要把一把剑从0星升至7星,有n颗宝石供你选择,第i颗宝石的价值是c[i],用第i颗宝石将剑从k-1星升至k星的成功率是prob[k][i],而失败后会掉lose[k][i], ...
- 国外常用代理IP对比【仅供参考】
国外常用代理IP对比[仅供参考]http://www.it588.cn/vmware/2019-03-22/547.html
- 2017.12.19 Java包的静态导入import static和import的区别
import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com-..ClassName;而静态导入是这样:import static com-..ClassN ...
- GBDT回归的原理及Python实现
一.原理篇 1.1 温故知新回归树是GBDT的基础,之前的一篇文章曾经讲过回归树的原理和实现.链接如下: 回归树的原理及Python实现 1.2 预测年龄仍然以预测同事年龄来举例,从<回归树&g ...
- 从多个textarea中随机选取一个内容
<div id="IMContentTest"> <textarea name="IMContent" class="IMClass ...
- java基础面试题:抽象类中是否可以有静态的main方法?
- Vue项目中遇到的一些问题总结
一.开发环境使用Ajax请求,报错 网上查的资料,在config中的index.js这样设置 proxyTable:{ '/api':{ target:'', //此处为你的API接口地址 chan ...
- 1269: [AHOI2006]文本编辑器editor
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5269 Solved: 2037[Submit][Status][Discuss] Descript ...
- 用dom1来实现,根据光标移动自动给表单加上背景色,光标移开自动去除背景色
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...