我正在尝试解决一个ProjectEuler问题,除了速度之外,我已经掌握了所有内容。我几乎可以确定程序执行缓慢的原因是由于嵌套循环。我希望能够得到一些关于如何加速的建议。我是一名初学者,所以对许多更高级的方法和主题不熟悉。
public class Problem12 {
public static void main(String[] args) {
int num;
for (int i = 1; i < 15000; i++) {
num = i * (i + 1) / 2;
int counter = 0;
for (int x = 1; x <= num; x++) {
if (num % x == 0) {
counter++;
}
}
System.out.println("[" + i + "] - " + num + " is divisible by " + counter + " numbers.");
}
}
}
编辑:下面是全新的代码,速度呈指数级增长。为了进一步提高速度,已经删除了常量行打印。
public class Problem12 {
public static void main(String[] args) {
int num;
outerloop:
for (int i = 1; i < 25000; i++) {
num = i * (i + 1) / 2;
int counter = 0;
double root = Math.sqrt(num);
for (int x = 1; x < root; x++) {
if (num % x == 0) {
counter += 2;
if (counter >= 500) {
System.out.println("[" + i + "] - " + num + " is divisible by " + counter + " numbers.");
break outerloop;
}
}
}
}
}
}
i=3
,那么num=6
,然后counter=4
,这是不正确的。 - afsafzal1、2、3、6
,正如OP链接中所述。 - njzk2