分治法因数和

因数和

现在有这样一个问题:求 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} p1c1p2c2p3c3...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)

当数据规模较小的时候,我们可以直接用求和公式计算出来然后取模。

当数据规模较大的时候,为了防止计算过程中整数溢出,有两种解决方法:

  1. 在求和公式中引入逆元,进而实现除法取模。
  2. 使用分治法求等比数列之和,下面给出证明。

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+...+p2c1)+(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+...+p2c1)+p2c+1(1+p+p2+...+p2c1)

= ( 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,2c1)

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,2c1)+pc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值