1 #include<stdio.h> 2 3 int factorsum(int number); 4 void PrintPN(int m, int n); 5 6 int main(void) 7 { 8 int m, n; 9 10 scanf_s("%d %d", &m, &n); 11 12 if (factorsum(m) == m) 13 { 14 printf("%d is a perfect number ", m); 15 } 16 17 if (factorsum(n) == n) 18 { 19 printf("%d is a perfect number ", n); 20 } 21 22 PrintPN(m, n); 23 24 return 0; 25 } 26 27 int factorsum(int number) 28 { 29 /* 30 所有数都包含因数1,所以因数和的初值设为1,然后从2开始判断 31 */ 32 int sum = 1; 33 for (int i = 2; i < number; i++) 34 { 35 if (number % i == 0) 36 { 37 sum = sum + i; 38 } 39 } 40 return sum; 41 } 42 43 void PrintPN(int m, int n) 44 { 45 int flag = 0; 46 for (int i = m; i <= n; i++) 47 { 48 if (factorsum(i) == i) 49 { 50 flag = 1; 51 52 printf("%d = 1", i); 53 for (int j = 2; j < i; j++) 54 { 55 if (i % j == 0) 56 { 57 printf(" + %d", j); 58 } 59 } 60 61 printf(" "); 62 } 63 } 64 if (flag == 0) 65 { 66 printf("No perfect number "); 67 } 68 }