一个超大数(比如10的20次方),求它的约数个数,要求用最快的方法,编译运行时间不超过一秒!!

2025-02-28 13:16:42
推荐回答(2个)
回答1:

重写写了个JAVA算法,效率很理想。
不过long只能支持到10的18次方
运行环境:E8400 + 4G RAM + JDK 1.5 + XP SP3(公司的机子就是牛啊!!!!)

import java.util.ArrayList;
import java.util.List;

public class Submultiple {

public static void main(String args[]){

long start = System.currentTimeMillis();

int[] primeNumAry = new int[64];

get64PrimeNumber(primeNumAry);

long num = 1000000000000000000L;
long orgNum = num;

int facCount = 0;

List list = new ArrayList();

for(int index = 0, factor = primeNumAry[index]; num != 1; ){
if(num % factor == 0){
facCount++;
num = num /factor;

if(num == 1){
list.add(facCount);
}
continue;
}else{
list.add(facCount);
factor = primeNumAry[++index];
facCount = 0;
}
}

long totalCount = 1L;

for(int item: list){
totalCount *= (item + 1);
}

long end = System.currentTimeMillis();

System.out.println("For number " + orgNum + ", Total " + (end - start)
+ " million seconds for " + totalCount + " submultiples");
}

private static void get64PrimeNumber(int[] primeNumAry) {
Label1: for(int i = 2, count = 0; count < 64; i++){
for(int j = 2; j < i; j++){
if(i % j == 0){
continue Label1;
}
}

primeNumAry[count++] = i;
}
}

}
--------------
For number 1000000000000000000, Total 0 million seconds for 361 submultiples

回答2:

(20加1)×(20加1)