我正在编写代码来计算第一个具有超过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;
}
}
}}
有帮助??
答案 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");
}
运行它并等待一两分钟,取决于您的机器):