如果 N = p1^c1 * p2^c2 * … *pk^ck
约数个数: (c1 + 1) * (c2 + 1) * … * (ck + 1)
#define debug(a) cout << #a << " = " << a << endl;
学习这个debug方法- 不需要 map 维护顺序,所以使用 unordered_map 即可
-
因为
ans = ans * (pp.second + 1) % mod;
所以用int存ans很可能爆int,用long long
#include <iostream>
#include <unordered_map>
using namespace std;
#define debug(a) cout << #a << " = " << a << endl;
int n, a;
const int mod = 1e9 + 7;
// long long ans; // 不要初始化为0!!!😭
long long ans = 1; // ans要做乘法,初始化为1
int main(){
cin >> n;
unordered_map<int, int> p;
while (n --){
cin >> a;
for (int i = 2; i <= a / i; i ++){
while (a % i == 0){
a /= i;
p[i] ++;
}
}if (a > 1) p[a] ++;
}
for (auto pp : p){
// debug(pp.second)
ans = ans * (pp.second + 1) % mod;
// debug(ans)
}
cout << ans;
return 0;
}