问题描述
编写一程序,求出1000以内的所有完全数
完全数解释:如果一个数恰好等于它除自身外的所有因子之和,则称该数为完全数。如6=1+2+3,则6为完全数。
分析
完全数问题可以进行分解,先对给定的数求出所有因子,再检验因子之和是否等于该数。
源程序
C语言
使用for语句
#include<stdio.h>
int main()
{
int num=2,i;
for(num;num<1000;num++)
{
int sum=0;
for(i=1;i<num;i++)
if(num%i == 0)
sum+=i;
if(sum==num)
printf("完全数有:%d",sum);
}
return 0;
}
使用while语句:
#include<stdio.h>
int main()
{
int num=2,i;
while(num<1000)
{
int sum=0;
for(i=1;i<num;i++)
if(num%i == 0)
sum+=i;
if(sum==num)
printf("完全数有:%d",sum);
num++;
}
return 0;
}
python
for num in range(2,1000):
sum = 0
for i in range(1,num//2+1):
if num%i == 0:
sum += i #将待检查数的所有因子相加求和
if sum == num:
print("%d"%num)
'''
6
28
496
'''
使用列表将因子和完整数存储起来:
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]
'''
回文数、亲密数等
根据这些数字定义,将问题分解,一般是分离数字的位数、因子等,然后按照定义进行判断即可