《算法竞赛进阶指南》-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(0A,B5107)

问题分析

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} p1k1p2c2pncn(其中 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=(p1c1p2c2pncn)B=p1Bc1p2Bc2pnBcn

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}\\} {p1k1p2k2pnkn},其中 0 ≤ k i ≤ B ∗ c i ( 1 ≤ i ≤ n ) 0\\leq k_i\\leq B*c_i(1\\leq i\\leq n) 0kiBci(1in)

根据乘法分配律, 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++p1Bc1)(1+p2+p22++p2Bc2)(1+pn+pn2++pnBcn)

有关质因数分解和约数的内容将在后面详细介绍。

上述式子中每个括号中的内容都是等比数列,如果使用等比数列求和公式,就需要用到除法。但是答案要对 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++p2c1)+(p2c+1++pc)

= ( 1 + p + ⋯ + p c − 1 2 ) + p c +

以上是关于《算法竞赛进阶指南》-AcWing-97. 约数之和 Sumdiv-题解的主要内容,如果未能解决你的问题,请参考以下文章

《算法竞赛进阶指南》0x32约数 余数之和

《算法竞赛进阶指南》0x32约数

算法刷题AcWing 97. 约数之和——递推

AcWing - 97 - 约数之和(分治因数和)

《算法竞赛进阶指南》0x57倍增优化DP AcWing293 开车旅行

题解|《算法竞赛进阶指南》 Sticks