问题描述

编写一程序,求出1000以内的所有完全数
完全数解释:如果一个数恰好等于它除自身外的所有因子之和,则称该数为完全数。如6=1+2+3,则6为完全数。

分析

完全数问题可以进行分解,先对给定的数求出所有因子,再检验因子之和是否等于该数。

源程序

C语言

使用for语句

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int num=2,i;
  5. for(num;num<1000;num++)
  6. {
  7. int sum=0;
  8. for(i=1;i<num;i++)
  9. if(num%i == 0)
  10. sum+=i;
  11. if(sum==num)
  12. printf("完全数有:%d",sum);
  13. }
  14. return 0;
  15. }

使用while语句:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int num=2,i;
  5. while(num<1000)
  6. {
  7. int sum=0;
  8. for(i=1;i<num;i++)
  9. if(num%i == 0)
  10. sum+=i;
  11. if(sum==num)
  12. printf("完全数有:%d",sum);
  13. num++;
  14. }
  15. return 0;
  16. }

python

  1. for num in range(2,1000):
  2. sum = 0
  3. for i in range(1,num//2+1):
  4. if num%i == 0:
  5. sum += i #将待检查数的所有因子相加求和
  6. if sum == num:
  7. print("%d"%num)
  8. '''
  9. 6
  10. 28
  11. 496
  12. '''

使用列表将因子和完整数存储起来:

perfects = []
for num in range(2,1000):
    yinzi = []
    for i in range(1,num):
        if(num%i ==0):
            yinzi.append(i)
    num_sum = sum(yinzi)

    if num_sum == num:
        perfects.append(num)
print(perfects)
'''
[6, 28, 496]
'''

回文数、亲密数等

根据这些数字定义,将问题分解,一般是分离数字的位数、因子等,然后按照定义进行判断即可