
——————————————————一个大的阶乘的如何拆分成幂的积的形式?
例如20!
1、首先求出所有的小于100的质数(素数)
private static boolean isPrime(int sum){
if (sum<2)
return false;
for (int i =2;i < sum;i++){
if (sum%i == 0)
return false;
}
return true;
}
20!就可以表示成这些素数的n次方的和
2、求出这些质数的阶数
例如:
例如:20! 1.先求出20以内的素数,(2,3,5,7,11,13,17,19) 2.再求各个素数的阶数 e(2)=[20/2]+[20/4]+[20/8]+[20/16]=18; e(3)=[20/3]+[20/9]=8; e(5)=[20/5]=4; ... e(19)=[20/19]=1;
private static int jie(int n,int i,int temp){
int sum = 0;
if (i<=n){
sum+=n/i;
return sum+jie(n,i*temp,temp);
}
return sum;
}
3、将所有的数值套入公式
private static void test11(){
BigInteger hun = BigInteger.ONE;
Vector<Integer> vector = new Vector<>();
for (int i = 1; i < 21; i++) {
if (isPrime(i))
vector.add(i);
}
System.out.println(vector);
List<Integer> list = new ArrayList<>();
for (Integer integer : vector) {
list.add(jie(20, integer, integer));
}
for (Integer integer : list) {
hun = hun.multiply(BigInteger.valueOf(integer+1));
}
System.out.println(hun);
}








