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);
	}
	
	

}

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.

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.

Edited 5 Years Ago by Taywin: n/a

This article has been dead for over six months. Start a new discussion instead.