Преглед на файлове

diary: add problem D for cfedu89

by the way make a sentence in problem E solution more clearly
Xℹ Ruoyao преди 5 години
родител
ревизия
f8b8f0e562
променени са 1 файла, в които са добавени 25 реда и са изтрити 1 реда
  1. 25 1
      content/diary/cfedu89.md

+ 25 - 1
content/diary/cfedu89.md

@@ -84,6 +84,30 @@ $1 \leq n \leq 5 \cdot 10^5$,$2 \leq a_i \leq 10^7$。
 
 太难了啊,不会啊 QAQ。
 
+问了群里的 dalao 们,他们说了一个结论:如果 $a_i$ 是某个素数的幂,则无解,
+否则一定能找到 $u$ 和 $v$ 满足 $uv = a_i$,且 $u \perp v$,
+$(u, v)$ 就是合法的解。简要证明如下:
+
+首先对于素数的幂 $p^j$,无论怎么取 $d_1$ 和 $d_2$,
+既然要取一个因子,结果仍然是 $p$ 的幂,即 $p^{k_1}$ 和 $p^{k_2}$。
+由于题目要求 $d_1 > 1$,$d_2 > 1$,有 $k_1 > 0$,$k_2 > 0$。
+故 $gcd(d_1, d_2) = gcd(p^{k_1}, p^{k_2}) = p^{\min(k_1, k_2)} \geq p^1 = p > 1$。因此无解。
+
+然后证明如果 $uv = a_i$,且 $u \perp v$,则 $(u, v)$ 对于 $a_i$ 是合法的解。
+我们有 $(u + v) \mod u = 0 + v \mod u = v \mod u \neq 0$,
+$(u + v) \mod v = u \mod v + 0 = u \mod v \neq 0$。
+根据中国剩余定理,因为 $u \perp v$,可得 $(u + v) \mod (uv) =
+(u + v) \mod a_i \neq 0$。这就满足了题目的要求。
+
+最后对于所有不是素数幂的 $a_i$ 构造出 $u$ 和 $v$ 即可,最简单的方法是,
+取出 $a_i$ 的最小素因子 $p$,它在 $a_i$ 中出现 $k$ 次,就使得
+$u = p^k$,$v = a_i / u$ 即可满足要求。
+
+可以用筛法预处理最小素因子,这样做时间复杂度就是
+$\mathcal{O}(\max\\{a_i\\} \log \log \max\\{a_i\\} + \sum \log a_i)$。
+
+[代码](https://codeforces.com/contest/1366/submission/83574965)
+
 ## [E. Two Arrays](https://codeforces.com/contest/1366/problem/E)
 
 ### 问题重述
@@ -99,7 +123,7 @@ $|a|, |b| \leq 2 \cdot 10^5$,保证 $b$ 严格单调上升。
 可以选区间 $[l_i, r_i)$ 中的任意位置。
 其中 $l_i$ 是 $a$ 中最后一个小于 $b_i$ 的数的位置,
 $r_i$ 是 $a$ 中最后一个等于 $b_i$ 的数的位置。
-由于 $b_i$ 的单调性,这些区间不相交。
+由于 $b_i$ 的单调性,这些区间两两不相交。
 所以直接用乘法原理,得到答案就是
 $$\prod_{i} (r_i - l_i)$$