每日一题-约数个数

约数个数

\(n(n<=100)\)个数x\((int范围内)\), 输出这些数的乘积的约数个数.

#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
# include <bits/stdc++.h>

using namespace std;

map<int, int> mp;
const int MOD = 1e9 + 7;

int main() {
    IOS;
    
    int n;
    cin >> n;
    
    while (n -- ) {
        int x;
        cin >> x;
        
        for (int i = 2; i <= x / i; ++i) {
            while (x % i == 0) {
                x /= i;
                mp[i] ++;
            }
            
        }
        if (x > 1) {
            mp[x] ++;
        }
    }
    long long ans = 1;
    for (auto i: mp) {
        ans = ans * (1 + i.second) % MOD;
    }
    cout << ans << '\n';
}

试除法分解因数, 且这样分解到的一定是质因子, 对每种质因数的数量利用乘法原理得到答案.

posted on 2022-12-08 00:42  Whosedream-0019  阅读(28)  评论(0)    收藏  举报

导航