hqx定理
今天改模拟赛题,见到前辈的题解中有一个十分nb的式子,记录一下。因为题解上传者是hqx,所以叫hqx定理。
对 \(n!\) 进行质因数分解:\(n!=\prod_{i=1}^m p_i^{k_i}\),则有
\[k_i=\sum_{j=1}^{\log_{p_i}n } {\lfloor \dfrac{n}{p_i^j}\rfloor}
\]
证明
对于 \(n!\) 的因子,肯定是 \([1,n]\) 贡献的。而 \(p_i^{k_i}\) 这个乘积,那么因子必定是 \(p_i\) ,通俗一点, \([1,n]\) 中有 \(k_i\) 个 \(p_i\)。
在 \([1,n]\) 中,能对 \(k_i\) 贡献的数,因子里面必定有 \(p_i\) 的倍数。而枚举 \(j\) 是枚举这个倍数是 \(p_i\) 的几次幂。一次幂有 \(\lfloor \dfrac{n}{p_i} \rfloor\) 个,每个可贡献一次;对于二次幂,有 \(\lfloor \dfrac{n}{p_i^2} \rfloor\) 个,每个应该是贡献两次,但是第一次已经贡献了,所以不会重复贡献。剩下的也类似。
得证。
应用
最经典的莫过于处于组合数 \(\binom{n}{m}=\dfrac{n!}{m!(n-m)!}\) 要取模,而且模数还不是个质数的情况。这样,线性筛一下,记录一下 \(k_i\) 相减就可以做除法。最后乘起来用快速幂。
时间复杂度是 \(O(n+\pi(n)\log n)\) 的,原文中说它近似于 \(O(n)\)。
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号