求愛数 by C

方針



割り切れた数を加算していくだけ

サンプルコード


#include <stdio.h>
#include <stdlib.h>

#define MAX 16

int IsFriend(int a,int b);
int GetFactorSum(int num);

//--------------------------------------------------------
//						 Main
//--------------------------------------------------------
int main()
{
	char str[MAX];
	int a,b;
	
	fgets( str, MAX, stdin ); a = atoi(str);
	fgets( str, MAX, stdin ); b = atoi(str);

	printf( "%d and %d", a, b );
	
	if( IsFriend(a,b) )	fputs( " are friend\n", stdout ); 
	else 			fputs( " are not friend\n", stdout );
	
	
	return 0;
}

//--------------------------------------------------------
//	友愛数判定
//--------------------------------------------------------
int IsFriend(int a,int b)
{
	int A = GetFactorSum(a) == b;
	int B = GetFactorSum(b) == a;
	
	if( A && B ) return 1;
	
	return 0;
}

//--------------------------------------------------------
//	約数の和を求める
//--------------------------------------------------------
int GetFactorSum(const int num)
{
	const int num2 = num>>1; // num2 = num/2
	int sum = 0;

	for(int i=1;i<=num2;i++)
	{
		if( !(num%i) ) sum += i;
	}
	
	return sum;
}