AcWing 870. 约数个数
原题链接
简单
作者:
wugensheng
,
2021-04-12 22:08:10
,
所有人可见
,
阅读 210
试除法求质数 & 用质因子指数求约数个数
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int M = 1e9 + 7;
map<int, int> mmap;
void divide(int x) { // 试除法求x的所有质数及其指数
for (int i = 2; i <= x / i; i++) {
if (x % i == 0) {
int cnt = 0;
while (x % i == 0) x /= i, cnt++;
mmap[i] += cnt;
}
}
if (x > 1) mmap[x] += 1;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
divide(x);
}
long long ans = 1;
for (auto t : mmap) {
//printf("%d,%d ", t.first, t.second);
ans = ans * (t.second + 1) % M; // 求约数个数
}
cout << ans << endl;
return 0;
}