POJ1845 Sumdiv
题意: 求\(A^B\)的所有约数之和\(\mod{9901}\left(1\leq A,B \leq5*10^7\right)\)
分析: A分解质因数为\(p_1^{c_1}\times p_2^{c_2}\times\cdots\times p_n^{c_n}\)。那么\(A^B\)表示为\(p_1^{Bc_1}\times p_2^{Bc_2}\times\cdots\times p_n^{Bc_n}\)。\(A^B\)的所有约数表示为集合\(\{p_1^{k_1}\times p_2^{k_2}\times\cdots\times p_n^{k_n}\}\),其中\(0\leq k_i \leq B\times c_i\left(1\leq i \leq n\right)\)
由乘法分配律, \(A^B\)的所有约数之和为:
\[\left(1+p_1+\cdots+p_1^{B*c_1}\right)*\left(1+p_2+\cdots+p_2^{B*c_2}\right)*\cdots\\*\left(1+p_n+\cdots+p_n^{B*c_n}\right)=\prod_{i=1}^n\left(\sum_{j=0}^{B*c_i}\left(p_i\right)^j\right)\]
括号内为等比数列,直接使用求和公式,需要做除法。答案还需对9901取模,mod运算只对加、减、乘有分配律,不能对分子分母取模后做除法,换一种思路,用分治法对等比数列求和。
用分治法求\(\displaystyle\sum_{i=1}^cp^i\quad\text{若c为奇数:}\) \[\sum_{i=1}^cp^i=\left(1+p+\cdots+p^\frac{c-1}{2}\right)+\left(p^\frac{c+1}{2}+\cdots+p^c\right)\\=\left(1+p+\cdots+p^\frac{c-1}{2}\right)+p^\frac{c+1}{2}*\left(1+p+\cdots+p^\frac{c-1}{2}\right)\\=(1+p^\frac{c+1}{2})*\sum_{i=1}^\frac{c+1}{2}p^i\]
若c为偶数,类似有:
\[\sum_{i=1}^cp^i=(1+p^\frac{c}{2})*\sum_{i=1}^{\frac{c}{2}-1}p^i+p^c\]
1 |
|
文章作者:wtyang
原始链接:https://antgwy.top/blog/Algorithm/POJ1845-Sumdiv/
版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 许可协议。转载请注明出处!