问题描述
问题描述
定义阶乘 n!=1×2×3×⋅⋅⋅×n。
请问 100! (100 的阶乘)有多少个约数。
Java
/*
数论题:
例如:求10的约数个数
第一步:将10分解为多个质数相乘 N = n1^a1 * n2^a2 * ... 10 = 2^1 * 5^1
第二步:合并 10的约数个数为: (1 + a1) * (1 + a2) * .... (1 + 1) * (1 + 1) = 4
例如:求180的约数个数
第一步:将180分解为多个质数相乘 N = n1^a1 * n2^a2 * ... 180 = 2^2 * 3^2 * 5^1
第二步:合并 180的约数个数为: (1 + a1) * (1 + a2) * .... (1 + 2) * (1 + 2) * (1 + 1)= 18
*/
public class 阶乘约数 {
public static void main(String[] args) {
int[] arr = new int[101];
for(int i = 2;i <= 100;i++){
int t = i;
int j = 2;
while(t != 1){ // 1的任何次方都是1
if(t % j == 0){
arr[j]++;
t /= j;
}else{
j++;
}
}
}
long ans = 1L;
for(int i = 1;i <= 100;i++){
if(arr[i] != 0)
ans *= (1 + arr[i]);
}
System.out.println(ans);
}
}