#include <stdio.h>
int factorsum( int number );
void PrintPN( int m, int n );
int main()
{
int 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);
return 0;
}
/* 你的代码将被嵌在这里 */
int factorsum(int number){ //判断n,m是否为完数。
int i,sum=0;
for(i=1;i<number;i++){
if(number%i==0)sum+=i;
}
return sum;
}
void PrintPN( int m, int n ){ //在n到m内判断完数。并且找到每个完数的因子。
int i,j,t=0;
int sum=0,a[1000],flag=1;
for(i=m;i<=n;i++){ //判断完数。
for(j=1;j<i;j++){
if(i%j==0){
sum+=j;
}
}
if(sum==i){flag=0;/*判断是否存在完数。*/ //再找到完数的基础上,找到因子。
for(j=1;j<sum;j++){ //将每个因子放到a[t]中。
if(sum%j==0){a[t]=j;
t++;}
}
printf("%d = 1",sum); //关键:由于1为每个完数的因子,将它先放有利于完成如下循环。
for(j=1;j<t;j++){ //循环输出。
printf(" + %d",a[j]);
}printf("\n");t=0; //将t制0,防止t不为0干扰循环进行。
}
sum=0; //同上。
}if(flag==1)printf("No perfect number");
}
注意:1.if(i%j==0)sum+=i;这是判断完数的条件。
2.注意一定要置0,for example:sum,t,。
3.关键一定要注意。