思路:首先根据题目a只有3个或者5个因子,可以判断a是一个质数的平方或者四次方。计算一个数的因子根据数论质因子分解,可得下图公式。由于所有的a相乘得到sum,而每个a已经是质数的平方或四次方,所以只要统计质因数及它的次方即可。最终利用公式即可求得答案。
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
const int mod = 1e9 + 7;
int main() {
map<int, int> m;
map<int,int> :: iterator it;
int n, T, x, p, e;
__int64 reg;
int s;
scanf("%d", &T);
while (T--) {
reg = 1;
scanf("%d", &n);
while (n--) {
scanf("%d", &x);
p = sqrt(x);
s = sqrt(p);
if (s * s == p) {
p = s;
e = 4;
} else
e = 2;
if (m[p])
m[p] += e;
else
m[p] = e;
}
for (it = m.begin(); it != m.end(); it++) {
reg *= (1 + it->second);
reg %= mod;
}
m.clear();
printf("%I64d\n", reg);
}
return 0;
}