趣味算法-亲密数

来源:互联网 发布:windows怎么切换mac 编辑:程序博客网 时间:2024/04/29 02:17

趣味算法-亲密数:

整数a 的因子和等于整数b,整数b的因子和等于整数a,则a 和 b是亲密数。


1)  计算当前数的真因子,并求和得到Sum;
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



原创粉丝点击