加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

C语言达成求亲密数代码及解析

发布时间:2021-11-12 14:21:25 所属栏目:教程 来源:互联网
导读:问题描述 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。 问题分析 根据问题描述,该问题可以转化为:给定整数A,判断A是否有亲密数。 为解决

问题描述
 
如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。
 
问题分析
 
根据问题描述,该问题可以转化为:给定整数A,判断A是否有亲密数。
 
为解决该问题,首先定义变量a,并为其赋初值为某个整数。则按照亲密数定义,要判断a中存放的整数是否有亲密数,只要计算出该整数的全部因子的累加和,并将该累加和存放到另一个变量b中,此时b中存放的也是一个整数。再计算b中存放整数的全部因子的累加和,将该累加和存放到变量n中。
 
若n等于a则可判定变量a和b中所存放的整数是亲密数。
 
算法设计
 
计算数A的各因子的算法:用A依次对i(i的范围可以是1〜A-1、1〜(A/2-1)中之一) 进行模(“%”,在编程过程中一定注意求模符号两边参加运算的数据必须为整数)运算,若模运算结果等于0,则i为A的一个因子加;否则i就不是A的因子。将所求得的因子累到变量B。
 
接下来求变量B的因子:算法同上,将B的因子之和累加到变量n。根据亲密数的定义判断变量n是否等于变量A(if(n==a)),若相等,则A和B是一对亲密数,反之则不是。
 
程序流程图:
 
 
 
下面是完整的代码:
 
#include<stdio.h>
int main()
{
    int a, i, b, n;
    printf("数字小于100000的亲密数对有:n");
    for( a=1; a<100000; a++ )  /*穷举100000以内的全部整数*/
    {
        for( b=0, i=1; i<=a/2; i++)  /*计算数a的各因子,各因子之和存放于b*/
            if(!(a%i))
                b+=i;
        for( n=0, i=1; i<=b/2; i++ )  /*计算b的各因子,各因子之和存于n*/
            if(!(b%i))
                n+=i;
        if(n==a && a<b)  /*使每对亲密数只输出一次*/
            printf("%4d--%4dn", a, b);  /*若n=a,则a和b是一对亲密数,输出*/
    }
 
    return 0;
}
 
运行结果:
 
数字小于100000的亲密数对有:
 220-- 284
1184--1210
2620--2924
5020--5564
6232--6368
10744--10856
12285--14595
17296--18416
63020--76084
66928--66992
67095--71145
69615--87633
79750--88730

(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读