intfactorsum( int number ); voidPrintPN( int m, int n ); intmain() { int i, m, n;
scanf("%d %d", &m, &n); if ( factorsum(m) == m ) printf("%d is a perfect number\n", m); if ( factorsum(n) == n ) printf("%d is a perfect number\n", n); PrintPN(m, n);
return0; }
/* 你的代码将被嵌在这里 */
输入样例1:
1
1 30
输出样例1:
1 2 3 4
1 is a perfect number 1 = 1 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14
intfactorsum( int number ){ //会造成重复相加 int sum=1; for(int i=2;i<=(number/2);i++){ if(number%i==0){ sum=sum+i; // 这个式子在 循环number/2条件下 可以保证不重复相加; } //在有#include<math.h>时 循环到sqrt(number)时 使用sum=sum+i+(number/i);也可保证不循环相加 } return sum; } voidPrintPN( int m, int n ){ int cnt=0 ;//cnt用于储存完数个数 for (int i=m;i<=n;i++){ if (factorsum(i)==i){ //完数条件 cnt++; printf ("%d = 1", i); for (int j=2;j<=(i/2);j++){ if ( i % j ==0) { printf(" + %d", j); } } printf("\n");