原题链接:C语言训练-亲密数
题目:
两个不同的自然数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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复