题目:
两个不同的自然数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 人评分