我有一個解決方案,爲Kattis問題https://open.kattis.com/problems/almostperfect。該解決方案已被接受,但運行時間太長(> 1.00s)。 我想盡一切辦法解決這個問題。我能做些什麼來進一步提高我的代碼的性能?完美數字性能
import java.io.FileInputStream;
import java.util.Scanner;
import java.io.*;
import java.util.*;
public class almostperfect {
public static int perfect(int number){
// 2 = perfect
// 1 = almost perfect
// 0 = not perfect
int sum = 0;
int b = 0;
for(int i=1;i<number;i++)
{
if(number%i==0)
{
sum = sum + i;
}
}
if(sum == number){
b = 2;
} else if(Math.abs(sum-number)<=2){
b = 1;
}
return b;
}
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
ArrayList<Integer> input = new ArrayList<Integer>();
int a;
int status;
while(scan.hasNextLong()){
input.add((int) scan.nextLong());
}
for(int i=0; i<input.size(); i++){
a = input.get(i);
status = perfect(a);
if(status==2){
System.out.println(a+" perfect");
} else if (status==1){
System.out.println(a+" almost perfect");
} else {
System.out.println(a+" not perfect");
}
}
}}
提示:如果'i'是'number'的一個因子,那麼'number/i'也是。 – Henry
另外,運行你的for循環,直到'我
rafid059
不要一路走到數字。數字不會有任何因素>數字/ 2。 – nicomp