题解:AcWing 870 约数个数
【题目来源】
AcWing:870. 约数个数 - AcWing题库
【题目描述】
给定 \(n\) 个正整数 \(a_i\),请你输出这些数的乘积的约数个数,答案对 \(10^9+7\) 取模。
【输入】
第一行包含整数 \(n\)。
接下来 \(n\) 行,每行包含一个整数 \(a_i\)。
【输出】
输出一个整数,表示所给正整数的乘积的约数个数,答案需对 \(10^9+7\) 取模。
【输入样例】
3
2
6
8
【输出样例】
12
【解题思路】

【算法标签】
《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
浙公网安备 33010602011771号