题解:AcWing 870 约数个数

【题目来源】

AcWing:870. 约数个数 - AcWing题库

【题目描述】

给定 \(n\) 个正整数 \(a_i\),请你输出这些数的乘积的约数个数,答案对 \(10^9+7\) 取模。

【输入】

第一行包含整数 \(n\)

接下来 \(n\) 行,每行包含一个整数 \(a_i\)

【输出】

输出一个整数,表示所给正整数的乘积的约数个数,答案需对 \(10^9+7\) 取模。

【输入样例】

3
2
6
8

【输出样例】

12

【解题思路】

image

【算法标签】

《AcWing 870 约数个数》 #数学知识# #约数# #试除法# #因式分解#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

const int N = 105, mod = 1e9 + 7; // 定义常量 N 和 mod
unordered_map<int, int> primes; // primes 用于存储质因数及其指数
int n, a; // n 表示输入的数的个数,a 表示当前输入的数

int main()
{
    cin >> n; // 输入数的个数 n
    while (n--) { // 遍历每个数
        cin >> a; // 输入当前数 a
        for (int i = 2; i <= a / i; i++) { // 遍历 2 到 sqrt(a) 的所有整数
            while (a % i == 0) { // 如果 i 是 a 的质因数
                a /= i; // 将 a 除以 i
                primes[i]++; // 增加质因数 i 的指数
            }
        }
        if (a > 1) primes[a]++; // 如果 a 大于 1,说明 a 本身是质数
    }

    long long ans = 1; // 初始化结果为 1
    for (auto p : primes) ans = ans * (p.second + 1) % mod; // 计算约数的个数
    cout << ans << endl; // 输出结果
    return 0; // 程序结束
}

【运行结果】

5
47
45
93
3
12
144
posted @ 2026-02-23 08:43  团爸讲算法  阅读(2)  评论(0)    收藏  举报