C语言实现求亲密数代码及解析

栏目: C · 发布时间: 6年前

内容简介:如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。根据问题描述,该问题可以转化为:给定整数A,判断A是否有亲密数。为解决该问题,首先定义变量a,并为其赋初值为某个整数。则按照亲密数定义,要判断a中存放的整数是否有亲密数,只要计算出该整数的全部因子的累加和,并将该累加和存放到另一个变量b中,此时b中存放的也是一个整数。再计算b中存放整数的全部因子的累加和,将该累加和存放到变量n中。

问题描述

如果整数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是一对亲密数,反之则不是。

程序流程图:

C语言实现求亲密数代码及解析

下面是完整的代码:

#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--%4d\n", 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

C语言实现求亲密数代码及解析

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2018-12/155863.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用UML构建Web应用

用UML构建Web应用

科纳尔伦 (Conallen Jim) / 陈起 / 中国电力出版社 / 2003-11 / 39.0

用UML构建Web应用(第2版),ISBN:9787508315577,作者:(美)Jim Conallen著;陈起,英宇译;陈起译一起来看看 《用UML构建Web应用》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具