• 更相减损术


    据说是数学必修三的内容,(雾)。

    部分摘自百度百科:

    更相减损术是出自《九章算术》的一种求最大公约数的算法。

    原文:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之

    操作:

    1. 任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
    2. 以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

    优化:

      在每次减好之后都对能除2的除2,若2个都能除2,同除2,gcd*2,(我也不知道为什么会快,但数据跑出来就是这样,(求教~~~))

    和辗转整除的区别:

    更相减损术和辗转相除法的主要区别在于前者所使用的运算是“减”,后者是“除”。

    从算法思想上看,两者并没有本质上的区别,

    但是在计算过程中,如果遇到一个数很大,另一个数比较小的情况,可能要进行很多次减法才能达到一次除法的效果,

    从而使得算法的时间复杂度退化为O(N),其中N是原先的两个数中较大的一个。

    相比之下,辗转相除法的时间复杂度稳定于O(logN)。

    1 while(1)
    2     {
    3         if((a.nu[1]%2==0)&&(b.nu[1]%2==0)){a.div2();b.div2();num++;}
    4         else if((a.nu[1]%2==0)) a.div2();
    5         else if((b.nu[1]%2==0)) b.div2();
    6         if(a>b){a=a-b; if(a.z()){while(num--)b.mul2();b.out();break;}}
    7         else {b=b-a; if(b.z()){while(num--)a.mul2();a.out();break;}}
    8     }
    View Code
  • 相关阅读:
    ubuntu 查看进程,查看服务
    ubuntu16.04下配置静态ip
    php监听客户端连接状态
    Excel有用的宏
    openfire插件开发1
    linux ps命令
    转:linux下面/usr/local和opt目录有何区别
    linux 开机自启动软件(包含xampp方法)
    转:java两个jre目录和三个lib目录
    linux PATH环境变量
  • 原文地址:https://www.cnblogs.com/SXia/p/6815265.html
Copyright © 2020-2023  润新知