java中高度可分的三角形数:程序效率低下

时间:2016-03-05 09:33:33

标签: java

我正在编写代码来计算第一个具有超过500个除数的数字,但是,由于某些效率低下,程序处理时间太长。这是我的代码:

public class Lessons {


    public static void main(String[] args) {

        int a,b;
        int triangle=0;



        for (a=1;a>0;a++)
        {
           triangle += a;
           int count=0;

           for (b=1;b<=triangle; b++)
           {    
                if (triangle%b==0)
               {    
                   count += 1;
                }
            }
        if (count > 500)
        {
            System.out.println("The number is " + triangle);
            break;
        }
     }
    }}

有帮助??

1 个答案:

答案 0 :(得分:3)

当您的限额为b <= triangle时效率低下。您可以测试该数字的平方根。以数字100为例 - 你必须循环到10,而不是100.如果它除以5,那么你找到了两个除数--5和20.第一个是低于10,另一个是更大。你唯一应该检查的是root本身 - 它只给你一个除数。

    public static void main(String[] args) {


    int number, limit, divisors;
    int i;
    Boolean found = false;

    number = 1;
    while (!found) {
        divisors = 0;
        limit = (int)Math.sqrt(number);
        i = 1;
        if (number % limit == 0) divisors++;
        while (i < limit) {
            if (number % i == 0) divisors +=2;
            i++;
        }
        if (divisors >= 500) {
            found = true;
            System.out.println("" + number);
        }
        number++;
    }
    System.out.println("done");
}

运行它并等待一两分钟,取决于您的机器):