题目大意
给定 $n$ 个正整数 $\{a_i\}$ 和 $k$,求在模 $p$ 意义下的
$$ \sum_{i=1}^n \frac{k^i}{a_i} \bmod p $$
分析
逐个求逆元是 $O(n \log p)$ 的,肯定会 T,需要想想别的办法。
批量求逆元的一个技巧,先求出 $a_i$ 的前缀积,然后求出全部积的逆元,再逐个往前推。即
$$ (a_n)^{-1} = \left(\prod_{i=1}^{n-1} a_i\right) \left(\prod_{i=1}^n a_i\right)^{-1} $$
显然,$\{a_n\}$ 中不能有 $0$。
vi get_inv(const vi &a, int p) {
int n = a.size() - 1;
vi prod(n + 1);
prod[0] = 1;
for (int i = 1; i <= n; i++) {
prod[i] = 1ll * prod[i - 1] * a[i] % p;
}
prod[n] = qpow(prod[n], p - 2, p);
vi iva(n + 1);
for (int i = n; i >= 1; i--) {
iva[i] = 1ll * prod[i] * prod[i - 1] % p;
prod[i - 1] = 1ll * prod[i] * a[i] % p;
}
return iva;
}