project Euler #21

今回も特に問題は発生しない。
問題に提示された手順で、コーディングすれば済む


/*------------------------------------------------------------------------------------------>
Problem 21 †

d(n)をnの真の約数の和と定義する。(真の約数とはn以外の約数のことである。)
もし、d(a) = b かつ d(b) = a (a ≠ b)を満たすとき、aとbは友愛数(親和数)であるという。

例えば、220の約数は1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110なのでd(220) = 284である。
また、284の約数は1, 2, 4, 71, 142なのでd(284) = 220である。

それでは10000未満の友愛数の合計を求めよ。
------------------------------------------------------------------------------------------->*/

#include<iostream>
using namespace std;

#define MAX 10000

int Divisor( int num , int divisor ){return(( num % divisor == 0 ) ? divisor : 0 );}

int d( int num ){

int sum = 0;

for( int i = 1 ; i < num ; i++ ) sum += Divisor( num , i );

return sum;
}

int main(){

int di;
int sum = 0 ;

for( int i = 1 ; i < MAX ; i++ ){

di = d( i );

if( ( d( di ) == i ) && ( i != di ) && di < MAX ){

sum +=i;
}
}

cout << "\nAnswer is :" << sum;

getchar();
return 0;
}