题目:

两个不同的自然数A和B;

如果整数A的全部因子(包括1,不包括A本身)之和等于B;

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

求3000以内的全部亲密数。


解题步骤:

1.计算数字2的全部因子之和sum1

2.计算sum1的全部因子之和sum2

3.sum2与2相等,且sum2小于sum1,则按正确格式输出sum2、sum1

4.依次重复以上计算,直到数字3000


思路分析:
1.显然数字1没有亲密数,因而从2开始;

2.得到数字A的因子之和后,将和做数字B,计算其因子之和。此时A的因子之和已经等于B,只需要比较B的因子之和是否等于A——若相等,则A与B是一对亲密数;

3.得到一对亲密数后,还需要弃去冗余结果,如当A=220时可以得到B=284,而当A=248时又会的得到B=220。故增加A>B的筛选条件,弃去冗余后得到正确结果。


参考代码:

#include<stdio.h>

int main(void){
	int i,j;
	int sum1,sum2;
	
	for(i=2;i<=3000;i++){
		sum1 = 0;
		sum2 = 0;
		
		for(j=1;j<i;j++){            //计算数字i的因子之和sum1 
			if(i%j==0)
			sum1 += j;
		}
		
		for(j=1;j<sum1;j++){        //计算因子sum1的因子之和sum2 
			if(sum1%j==0)
			sum2 += j;
		}
		
		if(sum2==i&&sum1>sum2)       //若sum2与数字i相等则两数互为亲密数,加上第二个条件排除重复数对 
		printf("(%d,%d)",sum2,sum1);
	}
	
	return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论