题目描述
约数个数
C++ 代码
import java.io.*;
import java.util.*;
class Main{
// int mod = 1e9 + 7;
public static void main(String[] args)throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(in.readLine());
//用来存所有 primes 里的约数个数.
Map<Integer, Integer> primes = new HashMap<>();
while(n-->0){
//当前需要求约数的数
int cur = Integer.parseInt(in.readLine());
for(int i = 2; i<= cur/i; i++){
int cnt = 0;
while(cur % i == 0){
cnt ++ ; //当前 i的约数个数++
cur/=i; //更新当前数
}
// 当前 约数i的个数. + cnt.
primes.put(i, primes.getOrDefault(i,0)+ cnt);
}
// 当前数为被除尽. 那么最后一个约数则等于 当前数
if(cur > 1) primes.put(cur, primes.getOrDefault(cur,0)+1);
}
long res = 1l;
//每一个 alpha + 1 相乘 % 1e9 + 7.
for(Integer prime : primes.keySet()) res = res*(primes.get(prime)+1)%1000000007;
System.out.println(res);
}
}