Let d(

n) be defined as the sum of proper divisors ofn(numbers less thannwhich divide evenly inton).

If d(a) =band d(b) =a, whereab, thenaandbare an amicable pair and each ofaandbare 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.

And this is the code i came up with to solve ( Notice: The code is not optimized! )

int sumimifier(int a)Thats basically it. If you have any better ways please post :)

{

int b = 1, count1 = 0, count2 = 0;

while(b < a)

{

if(a%b == 0)

{

count1 += b;

}

b++;

}

b = 1;

while(b < count1)

{

if(count1%b == 0)

{

count2 += b;

}

b++;

}

if(count2 == a && a != count1)

{

return(count1);

}

else

{

return 0;

}

}

int _tmain(int argc, _TCHAR* argv[])

{

int a, b = 0;

for( a = 0; a < 10000; a++ )

{

b += sumimifier( a );

}

printf( "%i", b );

getchar();

}

## No comments:

Post a Comment