作者 : XiaXinyu
日期 :2021-09-20
原题链接
题目:给定 n 个正整数 ai,请你输出这些数的乘积的约数个数,答案对 109+7 取模。
输入格式
第一行包含整数 n。
接下来 n 行,每行包含一个整数 ai。
输出格式
输出一个整数,表示所给正整数的乘积的约数个数,答案需对 10^9+7 取模。
数据范围
1≤n≤100,
1≤ai≤2×109
输入样例:
3
2
6
8
输出样例:
12
思路:基于算数基本定理,可以得到结论,若一个数n可以被分解成n=p1 ^ a1 * p2 ^ a2 *p3 ^ a3 *... *pn ^ an
其中p1~pn代表n被分解成的不同质因数,a1 ~an代表质因数的指数
因为每一个质因数的指数变动后和其他质因数组合起来都是一个新的约数,利用高中的组合数知识可以得到n的约数个数就是(a1 + 1)(a2 + 1) ··· (an + 1)
这里每个括号代表一个约数,而括号里的值就是约数的指数加1(加1是因为要包含0次幂
)
代码:
import java.util.*;
public class Main{
static int mod = 1000000000 + 7;
static HashMap<Integer,Integer> primes = new HashMap<>();
public static void getPrimes(int n){
for(int i = 2;i <= n / i;i ++){
while(n % i == 0){
primes.put(i,primes.getOrDefault(i,0) + 1);
n /= i;
}
}
if(n != 1){
primes.put(n,primes.getOrDefault(n,0) + 1);
}
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int T = in.nextInt();
while(T -- != 0){
int n = in.nextInt();
getPrimes(n);
}
long ans = 1;
for(int n : primes.values())
ans = (ans * (n + 1)) % mod;
System.out.println(ans);
}
}