阶乘约数
题目:100!(100)的阶乘中有多少个正约数。
分析:
这算是一道数学题吧,不做推导。
100!数目相对来说比较大,我使用180这个数来分析。
第一步:找出180以内的所有质数,(1不是质数)
180的约数【2,3,5,7,11,13,17…】
第二步:
如180=22335
180的约数个数为(1+2)(1+2)(1+1)=18个。
也就是说找出每一个180除以每一个质数所得的幂在加一相乘。
下面贴出求180约数个数的代码(100!的话需要使用到BigInteger);
package 第十一届;
import java.util.ArrayList;
public class 阶乘约数 {
public static void main(String[] args) {
int a = 180;
ArrayList<Integer> list = new ArrayList<>();
for (int i = 2; i <= 180; i++) {
ArrayList<Integer> copylist2 = new ArrayList<>();
for (int j = 2; j <= i; j++) {
if (i % j == 0) {
copylist2.add(j);
copylist2.add(i/j);
}
}
if (copylist2.size() <= 2) {
list.add(i);
}
copylist2.clear();
}
int count = 1;
for (int i = 0; i <list.size(); i++) {
int t = list.get(i);
int pq = 0;
int fp = 180;
while(fp % t == 0) {
fp = fp / t;
pq++;
}
count = count *(pq+1);
}
System.out.println(count);
}
}