m0_73080662 2022-11-03 17:32 采纳率: 83.3%
浏览 42
已结题

实验5_11_设计函数isPerfect与printPerfect 求简化我写的程序,防止运行超时间

6-7 实验5_11_设计函数isPerfect与printPerfect
分数 100

如果一个整数的各因子(包括1但不包括该整数本身)值之和等于该整数,则该整数称为“完全数”(perfect number)。例如,6是一个完全数,因为6=1+2+3。你的任务是设计函数isPerfect和printPerfect,判断并打印出区间[a,b](1<=a<b<=20000)内的所有完全数,并统计完全数的总个数。

isPerfect函数原型:int isPerfect(int n);

用于判断正整数n是否为完全数,若是,则返回值为1,否则为0。

printPerfect函数原型:void printPerfect(int n);

用于打印出一个完全数n的所有因子,当执行printPerfect(6)时,打印效果为:6=1+2+3。

输入与输出要求:
输入两个正整数a和b,输出区间[a,b]内的所有完全数及完全数的总个数
裁判测试程序样例

函数被调用的例子如下:
#include <stdio.h>

//判断一个数是否为完全数的函数
int        isPerfect(int);

//打印完全数的函数 
void    printPerfect(int);

int main()
{
    int i,a,b,count;
    
    scanf("%d%d",&a,&b);
    count = 0 ;//a,b两数间完全数的数量,初始化为0 
    for(i=a;i<=b;i++)
    {
        if (isPerfect(i))  //如果是完全数 
        {
            printPerfect(i) ;//打印该完全数 
            count ++ ;  //计数器加1 
        }        
    }
    printf("The total number is %d.\n",count);//输出a,b两数间完全数的数量 
    return 0 ;
}
**下面是我的程序**
int isPerfect(int n)
{  int i,a,sum;
 sum=0;
 for(i=1;i<n;i++)//i<n
 {
     a=n%i;
     if(a==0)sum+=i;    // sum+=a;
 }
    if (sum==n)  return 1;
 else 
     return 0;
 
}
void printPerfect(int n)
{ printf("%d=1",n);
    int i,a,sum;
 for(i=2;i<n;i++)
 {
     a=n%i;
     if(a==0) 
     { printf("+%d",i);  }
    
 }
    printf("\n");
}


正常情况都没有吧问题,但如果a,b的范围一大,比如一到两万,就会超时,希望可以提供一个更快更简化的思路,感谢
  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2022-11-03 17:38
    关注
    int isPerfect(int n)
    {
       int sum = 0;
       for(int i=1;i*i<=n;i++)
            if(n%i==0)
            {
                sum += i;
                if(i*i != n)
                    sum += n/i;
            }
       if(sum == n)
            return 1;
       return 0;
    }
    
    void    printPerfect(int n)
    {
        printf("1");
        for(int i=2;i<=n/2;i++)
        {
            if(n%i==0)
                printf("+%d",i);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 创建了问题 11月3日

悬赏问题

  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀