所谓完数就是该数刚巧等于除本身外的因子之和

所谓完数正是该数恰恰等于除自己外的因子之和。例如:6=1+2+3,此中1、2、3为6的因数。本题必要编写程序,寻觅大肆两正整数m和n之间的装有完数。

输入格式:

输入在风华正茂行中提交2个正整数m和n(1<m≤n≤10000卡塔 尔(英语:State of Qatar),中间以空格分隔。

出口格式:

逐行输出给定范围内种种完数的因子累积情势的降解式,各样完数占后生可畏行,格式为“完数
= 因子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("Nonen");
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 }

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website