我试图找到最快的全因子算法我使用将所有因子放入arraylist中进行加法,并将总和与原始数进行比较,以确定它们是否相同。
例子。如果加上1+2+3=6,6的因子是[1,2,3}。
有没有比我现在的程序更快的方法来分解、相加和比较呢?

public class Phony_Number {

private int number;

public Phony_Number(int num) {
    number = num;
    print();
}

public Phony_Number() {
    number = 0;
}

private ArrayList<Integer> factoring(int num) {
    ArrayList<Integer> factors = new ArrayList<Integer>();
    if (num % 2 == 0) {
        for (int ff = 3; ff < num; ff++) {
            if (num % ff == 0) {
                factors.add(ff);
            }
        }
    }
    return factors;
}

private int sum(ArrayList<Integer> array) {
    int sum = 0;
    for (int i = 0; i < array.size(); i++) {
        sum = +sum + array.get(i);
    }
    return sum+3;
}

private boolean compare(int num, int sum) {
    if (num == sum)
        return true;
    return false;
}

public void print() {
    for (int i = number; i > 5; i--) {
        if (compare(i, sum(factoring(i)))) {
            System.out.println("Number " + i + " is phony number");
        }
    }
}

}
My current result for 20,000 numbers is this

Number 8128 is phony number

Number 496 is phony number

Number 28 is phony number

Number 6 is phony number

Nano RunTime 359624716

最佳答案

有几个小问题突然冒出来了:compare方法是没有意义的,去掉它,它会使代码稍微简化一点您的sum方法只能使用+=为什么循环遍历每个数字,然后删除其中的一半,只需在循环中使用-=2。
你的主要储蓄来自于你的factoring方法-你知道num/2以上的数字不是因素,所以你一到那里就可以停下来。
(事实上,在这种情况下,您可以在num/3停止,因为您正在跳过2。

关于java - 查找所有电话号码的因素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25668352/

10-10 10:54