《算法竞赛进阶指南》-AcWing-97. 约数之和 Sumdiv-题解
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《算法竞赛进阶指南》-AcWing-97. 约数之和 Sumdiv-题解相关的知识,希望对你有一定的参考价值。
Sumdiv
问题描述
求 A B A^B AB的所有约数之和 m o d 9901 ( 0 ≤ A , B ≤ 5 ∗ 1 0 7 ) mod\\ 9901(0\\leq A,B\\leq 5*10^7) mod 9901(0≤A,B≤5∗107)
问题分析
把 A A A质因数分解,表示为 p 1 k 1 ∗ p 2 c 2 ∗ ⋯ ∗ p n c n p_1^{k_1}*p_2^{c_2}*\\cdots*p_n^{c_n} p1k1∗p2c2∗⋯∗pncn(其中 p i p_i pi都是质数)
那么 A B = ( p 1 c 1 ∗ p 2 c 2 ∗ ⋯ ∗ p n c n ) B = p 1 B ∗ c 1 ∗ p 2 B ∗ c 2 ∗ ⋯ ∗ p n B ∗ c n A^B=(p_1^{c_1}*p_2^{c_2}*\\cdots*p_n^{c_n})^B=p_1^{B*c_1}*p_2^{B*c_2}*\\cdots*p_n^{B*c_n} AB=(p1c1∗p2c2∗⋯∗pncn)B=p1B∗c1∗p2B∗c2∗⋯∗pnB∗cn。
则 A B A^B AB的所有约数为集合 { p 1 k 1 ∗ p 2 k 2 ∗ ⋯ ∗ p n k n } \\{p_1^{k_1}*p_2^{k_2}*\\cdots*p_n^{k_n}\\} {p1k1∗p2k2∗⋯∗pnkn},其中 0 ≤ k i ≤ B ∗ c i ( 1 ≤ i ≤ n ) 0\\leq k_i\\leq B*c_i(1\\leq i\\leq n) 0≤ki≤B∗ci(1≤i≤n)
根据乘法分配律, A B A^B AB的所有约数的和就是 ( 1 + p 1 + p 1 2 + ⋯ + p 1 B ∗ c 1 ) ∗ ( 1 + p 2 + p 2 2 + ⋯ + p 2 B ∗ c 2 ) ∗ ⋯ ∗ ( 1 + p n + p n 2 + ⋯ + p n B ∗ c n ) (1+p_1+p_1^2+\\cdots+p_1^{B*c_1})*(1+p_2+p_2^2+\\cdots+p_2^{B*c_2})*\\cdots*(1+p_n+p_n^2+\\cdots+p_n^{B*c_n}) (1+p1+p12+⋯+p1B∗c1)∗(1+p2+p22+⋯+p2B∗c2)∗⋯∗(1+pn+pn2+⋯+pnB∗cn)
有关质因数分解和约数的内容将在后面详细介绍。
上述式子中每个括号中的内容都是等比数列,如果使用等比数列求和公式,就需要用到除法。但是答案要对 9901 9901 9901取模,取模运算只对加、减、乘有分配率,不能直接对分子、分母分别取模后再做除法。我们可用换一种思路,使用分治法进行等比数列求和。
问题:使用分治法求 s u m ( p , c ) = 1 + p + p 2 + ⋯ + p c = ? sum(p,c)=1+p+p^2+\\cdots+p^c=\\ ? sum(p,c)=1+p+p2+⋯+pc= ?
若 c c c为奇数:
s u m ( p , c ) = ( 1 + p + ⋯ + p c − 1 2 ) + ( p c + 1 2 + ⋯ + p c ) sum(p,c)=(1+p+\\cdots+p^{\\frac{c-1}{2}})+(p^\\frac{c+1}{2}+\\cdots+p^c) sum(p,c)=(1+p+⋯+p2c−1)+(p2c+1+⋯+pc) = ( 1 + p + ⋯ + p c − 1 2 ) + p c +
以上是关于《算法竞赛进阶指南》-AcWing-97. 约数之和 Sumdiv-题解的主要内容,如果未能解决你的问题,请参考以下文章