int factorsum( int number )
{
int sum=0;
int i;
for(i=1;i<number;i++)
{
if(number%i==0)
{
sum+=i;
}
}
if(sum==i)
{
return sum;
}
}
void PrintPN( int m, int n )
{
int flag=0,sum=0;
for(int i=m;i<=n;i++)
{
if(factorsum(i) == i)//使用函数看i是否为完数,是完数加因子 下面就不要判断该因子是否为完数的因子了
{
printf("%d = 1",i); //是就输出 i=1 因为只要是完数相加的第一个都是1
for(int j=2;j<i;j++) //求因子
{
if(i%j==0)
{
printf(" + %d",j); //因子相加
}
}
printf("\n");//一行后输出换行符
flag=1;//标识符
}
}
if(flag==0)
{
printf("No perfect number");
}
}
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;
}
其中函数factorsum
须返回int number
的因子和;函数PrintPN
要逐行输出给定范围[m
, n
]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。