找完数(C语言)

找完数(C语言),第1张

#include 
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");
 }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/798607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存