输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
C语言代码如下:
#include<stdio.h>
int main()
{
int m,n,i,k,j,mark=0,flag=0; //初始认为集合内无符合条件的并排除空集的可能
int a[1000];
scanf("%d %d",&m,&n);
for(;m<=n;m++){
for(i=1,j=0;i<m;i++){ //从m开始遍历
if(m%i==0){ //如果是因子则放进数组内
a[j]=i;
j++; //增加数组指数
}
}
mark=0;
for(k=0;k<j;k++){
mark+=a[k]; //求对应m所有的因子之和
}
if(m==mark){ //判断:若 m所有的因子之和等于等于m时
flag=1;
printf("%d =",m); //若是,则输入对应格式
for(k=0;k<j;k++){
printf(" %d",a[k]);
if(k<j-1){
printf(" +");
}
}
printf("\n");
}
}
if(flag==0){
printf("None");
}
return 0;
}