【发布时间】:2021-03-16 03:12:59
【问题描述】:
我有一个程序可以计算出达到一定限度的友好数字对并将它们打印到标准输出。仅供参考 - 如果每个数字都等于另一个数字的适当除数之和(例如,220 和 284),则两个数字是友好的。
我的程序在前 8 对左右运行良好,但问题是当限制达到非常高的数字(例如 500 万)时,它会变得非常慢。有没有办法优化它,使其计算得更快? 这是我的代码
public class Amicable{
private static int num1, num2, limit = 5000000;
public static void main(String[] args){
for(int i = 1; i < limit;i++){
num1= sumOfDivisors(i);
num2 = sumOfDivisors(i)
if(num1 == num2){
System.out.println(num2 + " " + num1);
}
}
}
}
private static int sumOfDivisors(int n){
int sum = 0;
for(int i=1;i<=n/2;i++){
if(n%i==0){
sum =sum+i;
}
}
return sum;
}
}
【问题讨论】:
-
只是一个想法,你可以对偶数使用递归 - 继续分成两半,直到它不是偶数..例如220 -> 110 -> 55,所以计算出 55、2x55 和 4x55 的因数 [不包括在定义中].. 我想其他素数也可以这样做
标签: java performance