约数之和 (数论) | 您所在的位置:网站首页 › c语言约数之和 › 约数之和 (数论) |
前言
失恋了跑过来写这题,想当年这题咕了好久,现在分分钟切了。 ACwing题目地址 Solution通过唯一分解定理: \[A=p^{\alpha_1}_1*p^{\alpha_2}_2*...*p^{\alpha_n}_n \]所以: \[A^B=p^{\alpha_1*B}_1*p^{\alpha_2*B}_2*...*p^{\alpha_n*B}_n \]通过自己研究研究可以知道的两个定理: 1.约数个数定理: \[Num(A)=(1+\alpha_1)*(1+\alpha_2)*...*(1+\alpha_n) \]解释:从每一个质数里面任选一个次幂(选择范围 \([0,\alpha_i]\)),与其他质数相组合就是一个约数,所以约数个数就是上面这个式子。 2.约数和定理: \[Sum(A)=(1+p_1^1+p_1^2+...+p_1^{\alpha_1})*(1+p_2^1+p_2^2+...+p_2^{\alpha_2})*...*(1+p_n^1+p_n^2+...+p_n^{\alpha_n}) \]解释:每个括号里面就是每一个质数的任一个次幂(次幂范围 \([0,\alpha_i]\))之和,如果把括号拆开,就是每个括号里面选一个数乘起来,再把所有选择加起来。每个括号选一个数乘起来,不正对应每一个约数的值吗?所以约数和就是上面这个式子。 上面这个式子有 亿点点 难看,我们把它写简洁一点就是: \[Sum(A)=\prod_{i=1}^n (\sum_{j=0}^{\alpha_i}p_i^j) \]回到题目,在这个题目里的 约数和 就是如下式子: \[Ans=\prod_{i=1}^n (\sum_{j=0}^{\alpha_i*B}p_i^j) \]暴力计算复杂度 \(O(n^2)\),还要带上个质因数分解的复杂度。本题数据 \(n |
CopyRight 2018-2019 实验室设备网 版权所有 |