我目前有一個程序來查找給定數字的素因式分解;使用較小的數字可以正常工作,但超過一百萬年的時間需要很長時間。我的代碼效率極低,找到輸入下方的所有素數並檢查哪些分數沒有餘數。我不知道如何讓它效率低下,有什麼幫助?計算素數因子分解的更有效方法是什麼?
static ArrayList<Integer> primeNumbersBelow(long n) {
ArrayList<Integer> ay = new ArrayList<Integer>();
ay.add(2);
for(int i = 3; i < ((n % 2 != 0) ? (n + 1)/2 : n/2); i++) {
boolean divides = false;
for(int j = 2; j < i; j++) {
if(i % j == 0) {
divides = true;
}
}
if(!divides) {
ay.add(i);
System.out.println(i);
}
}
return ay;
}
static ArrayList<Integer> primeFactorisationOf() {
ArrayList<Integer> ay = new ArrayList<Integer>();
ArrayList<Integer> aay = primeNumbersBelow(input);
long n = input;
for(int i = 0, len = aay.size(); i < len; i++) {
int f = aay.get(i);
boolean run = true;
while(run) {
if(n % f == 0) {
ay.add(f);
n /= f;
} else {
run = false;
}
}
}
return ay;
}
你可以通過處理因子2作爲一個特殊情況,然後迭代奇數來加快速度。此外,不需要測試任何因素'我'哪裏'我*我> n';當在提供的代碼中遇到這種情況時,'n'是質數(最後一個因子)或零。 – 2015-03-31 16:11:25
沒有想過總是把它分成儘可能小的數字,所以它永遠不會達到非質數。謝謝! – platelminto 2015-03-31 16:19:04