因数和
现在有这样一个问题:求 A A A 的所有约数之和 m o d mod mod 15143 15143 15143。
把 A A A 分解质因数,表示为 p 1 c 1 ∗ p 2 c 2 ∗ p 3 c 3 ∗ . . . ∗ p n c n p_1^{c_1} * p_2^{c_2} * p_3^{c_3} * ... * p_n^{c_n} p1c1∗p2c2∗p3c3∗...∗pncn 。那么根据乘法分配律, A A A 的约数之和就是: ( 1 + p 1 + p 1 2 + . . . + p 1 c 1 ) ∗ ( 1 + p 2 + p 2 2 + . . . + p 2 c 2 ) ∗ . . . ∗ ( 1 + p n + p n 2 + . . . + p n c n ) (1 + p_1 + p_1^2 + ... + p_1^{c_1}) * (1 + p_2 + p_2^2 + ... + p_2^{c_2}) * ... * (1 + p_n + p_n^2 + ... + p_n^{c_n}) (1+p1+p12+...+p1c1)∗(1+p2+p22+...+p2c2)∗...∗(1+pn+pn2+...+pncn) 。
当数据规模较小的时候,我们可以直接用求和公式计算出来然后取模。
当数据规模较大的时候,为了防止计算过程中整数溢出,有两种解决方法:
- 在求和公式中引入逆元,进而实现除法取模。
- 使用分治法求等比数列之和,下面给出证明。
令 s u m ( p , c ) = 1 + p + p 2 + . . . + p c sum(p,c) = 1 + p + p^2 + ... + p^c sum(p,c)=1+p+p2+...+pc 。
若 c c c 为奇数: s u m ( p , c ) = ( 1 + p + p 2 + . . . + p c − 1 2 ) + ( p c + 1 2 + . . . + p c ) sum(p,c) = (1 + p + p^2 + ... + p^{\frac{c-1}{2}}) + (p^{\frac{c+1}{2}} + ... + p^c) sum(p,c)=(1+p+p2+...+p2c−1)+(p2c+1+...+pc)
= ( 1 + p + p 2 + . . . + p c − 1 2 ) + p c + 1 2 ∗ ( 1 + p + p 2 + . . . + p c − 1 2 ) = (1 + p + p^2 + ... + p^{\frac{c-1}{2}}) + p^{\frac{c+1}{2}} * (1 + p + p^2 + ... + p^{\frac{c-1}{2}}) =(1+p+p2+...+p2c−1)+p2c+1∗(1+p+p2+...+p2c−1)
= ( 1 + p c + 1 2 ) ∗ s u m ( p , c − 1 2 ) = (1 + p^{\frac{c+1}{2}}) * sum(p,\frac{c-1}{2}) =(1+p2c+1)∗sum(p,2c−1) 。
若 c c c 为奇数: s u m ( p , c ) = ( 1 + p c 2 ) ∗ s u m ( p , c 2 − 1 ) + p c sum(p,c) = (1 + p^{\frac{c}{2}}) * sum(p,\frac{c}{2}-1) + p^c sum(p,c)=(1+p2c)∗sum(p,2c−1)+pc。