#include <stdio.h>
int judge(int num)
{
int flag = 0;
if (num == 2)
{
return 1;
}
else
{
for (int i = 2; i <= (num / 2); i++)
{
if (num % i == 0)
{
flag = 1;
break;
}
}
if (flag == 1)
{
return 0;
}
else
{
return 1;
}
}
}
//judge判断该函数是否有因数,只有除了1和他本身之外仍有因数的数字
//返回之后才能进入引述计算的步骤
int main()
{
int m = 0, n = 0;
scanf("%d %d", &m, &n);
//录入数据
int num = m;
//num进入循环,并保证num在题目所给的区间内
int sum = 0;
//sum为定义的关于num的因数的加和
int flag = 0;
int fflag = 0;
while (num < (n + 1))
{
int arr[1000] = { 0 };
arr[0] = 1;
int a = 1;
//此处的arr[0]规定为1,a作为下标从1开始
flag = 0;
int p=judge(num);
if (p == 0)
//此处为该数字有因数,所以可以进入因数计算的步骤
{
sum = 0;
for (int i = 2; i <= num / 2; )
{
if (num % i == 0)
{
arr[a] = i;
a++;
sum += arr[a];
}
i++;
}
//这一步先将数字存储到arr中(便于之后的数据输出)
//加和也在这一步进行
if (sum == num)
{
flag = 1;
}
//flag相当于是对该数字是否是完数的标志
num++;
//num++之后再进入循环,直到num=n+1
}
else
{
num++;
continue;
}
if (flag == 1)
{
//如果flag=1的话,那么证明在数值所给的范围内是有完数的,此时fflag+1
//以下就是格式输出了
fflag++;
printf("%d = %d", num-1, arr[0]);
for (int i = 1; i < a; i++)
{
printf(" + %d", arr[i]);
}
printf("\n");
}
}
//以下所给函数就是为了检测所给数据范围之内是否存在完数
if (fflag == 0)
{
printf("None");
}
}
写的略微有些冗杂,先存在这儿,之后改进
|