相当 Trivial 的一篇东西。
给定 \(n\) 个数 \(a_{1 \sim n}\),值域为 \(V\)。求:
- 是否全部互质
- 是否两两互质
问题 1:是否全部互质
即求 \(\gcd\limits_{i=1}^n a_i\) 是否为 \(1\)。
直接 \(1 \sim n\) 辗转相除求 \(\gcd\)。
时间复杂度 \(O(n + \log V)\)。(有些反直觉!)
问题 2:是否两两互质
给 \(a\) 开一个桶 \(c\)。
枚举 \(d\),暴力求 \([\sum\limits_{i \times d \le V} c_i \ge 2]\)。根据调和级数的结论,时间复杂度 \(O(n + V \log V)\)。
优化:线性筛筛出 \(V\) 以内质数。枚举质数 \(p\),暴力求 \([\sum\limits_{i \times p \le V} c_i \ge 2]\)。
根据质数倒数和的结论,时间复杂度 \(O(n + V \log \log V)\)。