//
//
//2013年6月3日13:32:55
//
//作者:小代码
//
//题目:
//Description
//
//两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
//Input
//Output
//
//3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号)
//一对亲密数只输出一次, 小的在前
//
//提示:样例输出并非所有数据
//Sample Input
//Sample Output
//(220,284)(1184,1210)
//HINT
//
//按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。计算数a的各因子的算法:
//
//用a依次对i(i=1~a/2)进行模运算,若模运算结果等于0,则i为a的一个因子;否则i就不是a的因子。
#include <stdio.h>
int main()
{
int SumOfFac( int n );//求一个整数的因子和,因子不包括这个整数本身
int i;//循环控制
int temp;//暂时保存因子和
for( i = 2; i <= 3000; i++ )
{
temp = SumOfFac( i );
if( SumOfFac( temp ) == i )
{
if( temp > i )
{
printf("(%d,%d)",i,temp);
}
}
}
printf("\n\nHello World\n");
system("pause");
return 0;
}
//求一个整数的因子和,因子不包括这个整数本身
int SumOfFac( int n )
{
int i;//循环控制
int sum = 0;//保存因子和
for( i = 1; i < n; i++ )
{
if( 0 == n % i )
{
sum = sum + i;
}
}
return sum;
}