题目描述
约数个数
int范围内 一个数的约数最多为1600个
10的9次方范围内 一个数的约数最多为1344个
样例
// 基本思想
//如果 N = p1^c1 * p2^c2 * ... *pk^ck
//约数个数: (c1 + 1) * (c2 + 1) * ... * (ck + 1)
import java.util.*;
public class Main{
static int mod = (int)1e9 + 7;
public static void main(String[] args){
Map<Integer,Integer> map = new HashMap<>(); //创建一个哈希表
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
while(n -- > 0){
int x = scan.nextInt();
//下面这里是运用了分解质因数的模板,
for(int i = 2 ; i <= x / i ; i ++ ){
while(x % i == 0){
x /= i;
// map.getOrDefault(i,0) 这个是获取对应i位置的values值
map.put(i,map.getOrDefault(i,0) + 1);
}
}
if(x > 1) map.put(x,map.getOrDefault(x,0) + 1 );
}
long res = 1;
//map.keySet()获取所有的key值,map.values()获取所有的values值
for(int value : map.values()){
res = res * (value + 1) % mod;
}
System.out.println(res);
}
}