7-45 找完数(20 分)
程序员文章站
2023-08-26 15:34:37
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。 输入格式: 输入在一行中给出2个正整数m和n(1
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14
1 #include <stdio.h> 2 3 int isPerfect(int num); 4 void output(int num); 5 6 int main(int argc, char const *argv[]) 7 { 8 int m, n; 9 int i; 10 int count = 0; 11 12 scanf("%d %d", &m, &n); 13 14 for ( i = m; i <= n; i++ ) { 15 int num = i; 16 if ( isPerfect( num ) ) { 17 count++; 18 output(num); 19 } 20 } 21 if ( count == 0 ) { 22 printf("None\n"); 23 } 24 return 0; 25 } 26 27 int isPerfect(int num) 28 { 29 int nSum = 0; 30 int ret = 0; 31 for ( int i = 1; i < num; i++ ) { 32 if ( num % i == 0 ) { 33 nSum += i; 34 } 35 // 判断一个数是不是完数 要把它所有的因子都加起来 36 if ( nSum == num && i + 1 == num) { 37 ret = 1; 38 } 39 } 40 return ret; 41 } 42 43 void output(int num) 44 { 45 int nSum = 0; 46 printf("%d = ", num); 47 for ( int i = 1; i < num; i++ ) { 48 if ( num % i == 0 ) { 49 nSum += i; 50 printf("%d", i); 51 if ( nSum == num ) { 52 break; 53 } else { 54 printf(" + "); 55 } 56 } 57 } 58 printf("\n"); 59 }
上一篇: 校园和生活中的幽默小笑话
下一篇: 01-备战秋招之Map