题目描述
写一个程序,给出指定整数范围 [ a , b ] 内所有的完数。一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。例如 6 = 1 + 2 + 3,所以 6 是完数。
输入格式
共一组数据,为两个正整数,分别为 a 和 b (1<a<b<10^5) ,表示整数范围的下界和上界。
输出格式
指定范围内所有完数,每个数占一行。
输入样例
6
100
输出样例
6
28
C语言实现
算法的基本思想:编写判断一个数是不是完数的函数,在主函数中输入指定范围后,遍历范围内的所有整数,用函数判断是不是完数,如果是则输出。
#include<stdio.h>
int isPerfect(int num); //判断整数num是不是完数
int main(){
int a,b;
scanf("%d",&a); //输入下界
scanf("%d",&b); //输入上界
int k;
for(k=a; k<=b; k++){
if(isPerfect(k) == 1)
printf("%d\n",k);
}
return 0;
}
int isPerfect(int num){
int res,tmp=1; //res为函数的返回值,tmp为num除本身外因子之和
int i;
for(i=2; i<num; i++){
if(num%i==0) tmp += i;
}
//若num除它本身外各因子之和tmp与num相等,则返回1,否则返回0
if(tmp==num) res = 1;
else res = 0;
return res;
}