5.7打卡

发布时间 2023-05-07 22:38:56作者: 恋恋恋白

一、问题描述:
如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。

二、设计思路:
根据问题描述,该问题可以转化为:给定整数A,判断A是否有亲密数。为解决该问题,首先定义变量a,并为其赋初值为某个整数。则按照亲密数定义,要判断a中存放的整数是否有亲密数,只要计算出该整数的全部因子的累加和,并将该累加和存放到另一个变量b中,此时b中存放的也是一个整数。再计算b中存放整数的全部因子的累加和,将该累加和存放到变量n中。
n等于a则可判定变量a和b中所存放的整数是亲密数。

三、程序流程图

 

 

四、代码实现

#include<stdio.h>

int main()

{int a,i,b,n;

printf("There  are  following  friendly--numbers  pair  smaller  than  3000:\n");

for(a=1;a<3000;a++)

{

    for(b=0,i=1;i<=a/2;i++)

        if(!(a%i))

        b+=i;

    for(n=0,i=1;i<=b/2;i++)

        if(!(b%i))

        n+=i;

    if(n==a&&a<b)

        printf("%4d--%4d    ",a,b);

}

 

}