$Smart$ $Yanzi$
$Description$
给你一个数 $S$ ,求有多少数的约数和等于 $S$ 。
$Solution$
对于一个数 $S$ ,根据算数基本定理,有分解式:
$$
S = p_1^{a_1}p_2^{a_2}p_3^{a_3}…p_n^{a_n}
$$
所以约数和就是
$$
sum = \prod_{i = 1}^{n}\sum_{j=0}^{a_i}p_i^j
$$
由于 $S<=2*10^9$ ,考虑枚举 $S$ 的所有因子,先筛出 $\sqrt{S}$ 以内的质数,然后枚举 $p_i$ ,对于每个 $p_i$ 枚举 $a_i$ ,爆搜,如果将 $S$ 分解成功,答案 $ + 1$ 。
同时,如果 $S - 1$ 是一个质数,且 $>=$ 当前搜的 $p_i$ ,答案也要 $ + 1$ ,因为 $S - 1$ 也是此时构造出的数的因子。
其实我们是先把质因子全部取出来,然后找所有的乘起来的可能,对于每种可能都枚举它是否成立。
就是把 $S$ 拆掉,然后再拼回去。
$Code:$
1 |
|