趣味算法-亲密数:
整数a 的因子和等于整数b,整数b的因子和等于整数a,则a 和 b是亲密数。
2) 对真因子的和进行再求因子和 FSum;
3) 判断FSum 是否和原数相等;
#include <stdlib.h>
#include <stdio.h>
int IsFriendNum(int nNum)
{
int i = 1;
int nSum = 0;
int nFSum = 0;
for (i = 1; i < nNum/2+1; i++)
{
if (nNum % i == 0)
{
nSum += i;
}
}
for (i = 1; i < nSum/2+1; i++)
{
if (nSum % i == 0)
{
nFSum += i;
}
}
if (nFSum == nNum)
{
printf("%d and %d are friend numbers\n", nNum, nSum);
}
return 0;
}
int main()
{
int nRange = 100000;
int i = 1;
for (i=1; i < nRange; i++)
{
IsFriendNum(i);
}
scanf("%d", &i);
return 0;
}
算法复杂度分析:
1) 求但个数 x 的因子和 Sum 复杂度为:O(x) = x / 2;
2) 再求Sum的因子和FSum 复杂度为:O(x) = x / 2;
3) 这两部分的总的时间为 O(X) = X;
4) 求数据的范围是n O(n) = 1 + 2 + .... + n = n*(n-1)/2