Sumdiv(约数和问题)

题目地址

看到这题的题解,大佬都说是小学奥数,蔡得我不敢鸡声

\(a^b\) 所有的约数之和 mod \(9901\) \((1<=a,b<=5*10^7)\)

题解

做这道题,我还赶紧去看了一下 唯一分解定理

我们先把 \(a\) 分解质因数

\[a=p_1^{c_1}*p_2^{c_2}*...*p_n^{c_n} \]

比如说 \(12\) 可以分成 \(2^2+3^1\)

因为 同指数幂相乘,指数不变,底数相乘 ,所以就有:

\[a^b=p_1^{c_1*b}*p_2^{c_2*b}*...*p_n^{c_n*b} \]

根据 唯一分解定理,\(a^b\) 的约数和就是

\[(1+p_1+p_1^2+...+p_1^{c_1*b})*(1+p_2+p_2^2+...+p_2^{c_2*b})*...*(1+p_3+p_3^2+...+p_3^{c_3*b}) \]

大佬看出了是等比数列,而我这个蒟蒻没有看出来

因为等比数列的求和公式要用除法,除法不满足 \(\text{mod}\) 的分配律

所以我们就迎来了这个题目的重点——分治

\(\text{sum}(p,c)\),为 \((1+p+p^2+...+p^{c})\)

  • \(c\) 为奇数,则有

\[\text{sum}(p,c)=(1+p+...+p^{\frac{c-1}{2}})+(p^{\frac{c+1}{2}}+...+p^c) \]

\[=1*(1+p+...+p^{\frac{c-1}{2}})+\frac{c+1}{2}*(1+p+...+p^{\frac{c-1}{2}}) \]

\[=(1+\frac{c+1}{2})*\text{sum}(p,\frac{c-1}{2}) \]

  • \(c\) 为偶数数,类似的有

\[\text{sum}(p,c)=(1+\frac{p}{2})*\text{sum}(p,\frac{p}{2}-1)*p^c \]

结合快速幂,时间复杂度上可以过得去

讲了这么多(虽然是看书),我忘了告诉你这个题目我是口胡的。

posted @ 2019-08-26 12:23  基地AI  阅读(238)  评论(0编辑  收藏  举报