You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过质因数分解的std::map<int, int>求正整数的约数个数?

如何通过质因数分解结果计算正整数的约数个数?

核心原理

这用的是约数个数定理:如果一个正整数的质因数分解为 ( n = p_1^{a_1} \times p_2^{a_2} \times ... \times p_k^{a_k} )(其中 ( p_i ) 是质数,( a_i ) 是该质数在分解式中的出现次数),那它的所有约数个数就是把每个质数的出现次数加1后,再相乘的结果,也就是:
[ (a_1 + 1) \times (a_2 + 1) \times ... \times (a_k + 1) ]
加1的原因很简单:每个质数在约数里可以选0次、1次……直到它的最大出现次数,总共就是 ( a_i + 1 ) 种选择,所有质数的选择组合起来就是总约数数量。

结合std::map的实现方式

拿到存储质因数的std::map<int, int>后,只需要遍历这个map,把每个键对应的值(质数的出现次数)加1,再把所有结果累乘即可。

用C++代码实现的示例:

#include <map>

int countDivisors(const std::map<int, int>& factorMap) {
    int result = 1;
    for (const auto& pair : factorMap) {
        result *= (pair.second + 1);
    }
    return result;
}

示例验证

比如100的质因数分解对应m[2]=2、m[5]=2,代入公式得到(2+1)*(2+1)=9,100的约数确实是1、2、4、5、10、20、25、50、100,一共9个,完全匹配。

内容的提问来源于stack exchange,提问作者Penny M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:05:35