思路:
(1)由數論基本定理,任何一個正整數x都能寫作,其中p1,p2..pk為x的質因子。
(2)由此可以推斷,要求一個數約數的個數,注意到約數就是p1,p2...pk的一種組合,實際上就是求這些質因子的組合方式,每種質因子有()種選擇,顯然是(
)...(
)種不同組合,也就有這么多個約數了;
(3)對于本題而言,要求n個數乘在一起后的約數個數,基本思路是先乘在一起,再質因子分解同時記錄各個質因子個數,最后再計算約數個數,為防止爆long long 引起誤差,對于每個數直接拆分為質因子,再拼在一起,就是總的質因子及其個數了,然后再計算約數個數。
代碼:
#include<bits/stdc++.h>using namespace std;const int MOD=1e9 + 7;unordered_map<int,int> q;
int main()
{int n;cin >> n;while(n --){int x;cin >> x;for(int i = 2;i <= x/i;i ++){if(x %i == 0){q[i] ++;x /= i;cout }}if(x > 1) q[x] ++;}int res = 1;for(auto t : q){int e = t.second;res = (res*(e + 1) )%MOD;cout << res << endl;}cout << res << endl;return 0;
}