Sxlysz 2021-09-21 20:13 采纳率: 0%
浏览 35

《 九章算术》记载的“中华更相减损术”可快速计算正整数a和b的最大公约数,其过程如下:

令p = 1
若a和b不都是偶数,则转到第5行
令p = px2,a = a/2, b = b/2
转到第2行
令t = |a - b|
若t = 0, 则返回并输出 axp
若t为奇数,则转到第10行
令t = t/2
转到第7行
若a ≥ b, 则令a = t; 否则,令 b=t
转到第5行

  1. 按照上述流程,编写一个算法 int gcd(int a, int b),计算a和b的最大公约数;
  2. 分析该算法的渐进时间复杂度
  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-09-21 20:51
    关注
    int gcd(int a, int b)
     {
        int ads=1;   //为求最大公约数定初值
       
        while(a%2==0&&b%2==0)
        {
            a/=2;b/=2;
            ads*=2;       //把a,b中的2^n都提出来
        }
        while(a!=b)      //直到a和b相等
        {                      //也可理解为直到所得的 减数 与 差 相等为止
            if(a>b)  a-=b;
            else    b-=a;
        }
        ads*=a;           //把最后一次循环所得减数 或者 差乘以前面的2^n
        return ads;
     }
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d",gcd(a,b));
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月21日

悬赏问题

  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签)
  • ¥50 sft下载大文阻塞卡死
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失
  • ¥15 springboot+vue 集成keycloak sso到阿里云
  • ¥15 win7系统进入桌面过一秒后突然黑屏
  • ¥30 backtrader对于期货交易的现金和资产计算的问题
  • ¥15 求C# .net4.8小报表工具