C语言求亲密数

本文介绍了亲密数的概念,即两个整数A和B的因子之和相等,然后通过C语言实现寻找3000以内全部亲密数的算法,包括问题分析和详细代码展示,最终得出220-284、1184-1210和2620-2924等亲密数对。

问题描述

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

什么叫亲密数

先把220的因子都写出来:1、2、4、5、10、11、20、22、44、55、ll0、220,
扣除220本身,把这些因子加起来1+2+4+5+10+11+20+22+44+55+110=284
然后把284的因子分解出来:1、2、4、71、142、284,
扣除284本身,把所有因子相加1+2+4+71+142=220,
看出来了吗?除了他们本身,220的因子总和是284,284的因子总和是220.
著名的《费马最后定理》里有这样一段话“坐标→(284,220):代表着→你中有我,我中有你.…………换句话说这两个数,就是用全部的生命去成全对方.”
你可能会惊叹,这真是一组奇妙的数字,你中有我, 我中有你, 宛如一对恋人.
这对数字是数学界发现最早的“亲和数”,发现它们的人的名字是“毕达哥拉斯”.

问题分析

根据问题描述,该问题可以转化为:给定整数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是一对亲密数,反之则不是。

下面是完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值