so this is the assignment
Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
If d(a) = b and d(b) = a, where a b, then a and b are an amicable pair and each of a and b are called amicable numbers.

For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.

Evaluate the sum of all the amicable numbers under 10000

this is what I have
WARNING: if you have are running the program start task manager cuz it runs through a infinte loop for some reason

``````public class AmicableNumber {
public static void main(String args[]){
int sum=0;
for(int i=2;i<10000;i++){
for(int j =1;j<i;j++){
if(isAmicable(i,j)==true){
sum+=i;
}
}

}
System.out.println(sum);
}
//this would work right?
public static int n(int a){
int sum = 1;
for(int i=2;i<a;i++){
if(a % i == 0){
sum += i;
}

}
return sum;
}
//is this right
public static boolean isAmicable(int a,int b){
//would this work
return n(a) == n(b) && n(b)==n(a);
}

}``````

## Recommended Answers

I'm not able to see any error in the program as such. But this should take a long time to get you the answer. Because basically you are iterating 3 inner loops 10000 times and also the third loop is almost called four times for each run of the second …

## All 3 Replies

I'm not able to see any error in the program as such. But this should take a long time to get you the answer. Because basically you are iterating 3 inner loops 10000 times and also the third loop is almost called four times for each run of the second inner loop.

I hope you got my point.

so what should I do to make it faster

I am not sure what output you want here. You have duplicated computation in your loop. If you put

``System.out.println(i+" and "+j+" is checked");``

under line 7, you will see what I mean about duplicated value (for i).

Also, your line 28 can be reduced to return n(a)==n(b); because n(b) is always equal to n(a) if the first condition is true.

PS: It you want it to be faster, you should have a variable to store all amicable numbers. Once a number found its pair, its pair value shouldn't need to be computed again. You need only up to 10,000 numbers anyway.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.20 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.