top1编程
← 返回题目
题解

因数个数之和

1 条题解

  • 0
    @ 2026-8-5 16:07:42

    解题思路

    如果一个整数 d 能整除 x(也就是 x % d == 0,余数为 0),那么 d 就是 x 的因数。题目要求用函数 func(x) 来求一个数 x 的因数个数。

    求因数个数的方法很简单:从 1 到 x 一个一个试,只要能整除 x,个数就加 1。

    例如 x = 3:1 能整除 3,2 不能,3 能整除,所以因数有 1、3,共 2 个。 例如 x = 6:1、2、3、6 都能整除 6,共 4 个。

    题目要计算 4 个整数的因数个数之和,所以我们把 func(a) + func(b) + func(c) + func(d) 加起来就是答案。

    验证一下样例 3 6 8 5:

    • func(3) = 2(因数 1、3)
    • func(6) = 4(因数 1、2、3、6)
    • func(8) = 4(因数 1、2、4、8)
    • func(5) = 2(因数 1、5)
    • 总和 = 2 + 4 + 4 + 2 = 12,和样例输出一致。

    题目要求“计算一个整数的因数个数用函数 func() 实现”,所以我们一定要把统计因数的代码写进函数里。

    参考代码

    // P4594 因数个数之和:用函数 func() 统计每个整数的因数个数并求和
    #include <iostream>
    using namespace std;
    
    // 返回整数 x 的因数个数
    int func(int x) {
        int cnt = 0;                      // cnt 记录因数个数
        for (int i = 1; i <= x; i++)      // 从 1 试到 x
            if (x % i == 0) cnt++;        // i 能整除 x,说明 i 是 x 的因数
        return cnt;
    }
    
    int main() {
        int a, b, c, d;
        cin >> a >> b >> c >> d;          // 输入 4 个整数
        // 四个数的因数个数相加
        cout << func(a) + func(b) + func(c) + func(d) << endl;
        return 0;
    }
    

    复杂度分析

    数字最大不超过 10000。func(x) 要从 1 试到 x,时间是 O(x)。一共 4 个数,所以总时间大约是 O(4 × 10000),对于电脑来说一下子就完成了。只用几个变量,空间是 O(1)。

    • 1