浅谈JS实现最大公约数的几种方法

<script>

        //  封装一个函数玩玩

        function inputTwoNum(){

        var x=prompt("输入两个数字用/隔开"),

        //  var aa = new Array();

          y = x.split("/");//将输入框中的两个数转换成数组;

        //  aa[0] = y[0],

        //  aa[1] = y[1];

        return y;

        }

            function gys(a,b){

                while(Math.abs(a-b)){

                    t = b;

                      b = Math.abs(a-b);

                      a = t;

                }

                return b;

        }

      var x = inputTwoNum();

      var a = Number(x[0]),

          b = Number(x[1]);

        document.write(a+"跟"+b+"最大公约数是:"+gys(a,b));

        第一种:for循环比较两个数因素相等的最大值

          var x=prompt("输入两个数字用/隔开");

        var y = x.split("/"),

        a = y[0],

        b = y[1];

        if(a>b){//两个数的公约数不可能大于其中任何一个数,所以从较小的数字循环比较的,加快效率

            t=a;

            a=b;

            b=t;

        }

        for(i=a;i>0;i--){//因为是最大公约数,所以从大到小计算

              if(a%i==0){//a的约数

                    if(b%i==0){//a的约数=b的约数

                          document.write(a+"跟"+b+"的最大公约数是:"+i); 

                              break;           

                    }

              }

              }

    第二种 while循环,取余结果为零时,被取余的那个数即为最大公约数(数学逻辑)

        function gys(a,b){

              var x=a%b;

                while(x){

                    a=b;b=x;x=a%b;

                }

                return b;

        }

    var x=prompt("输入两个数字用/隔开");

        var y = x.split("/"),

        a = y[0],

        b = y[1];

        document.write(a+"跟"+b+"的最大公约数是:"+gys(a,b));


          第三种 while循环,更相减损法


      function gys(a,b){

            while(Math.abs(a-b)){

                t = b;

                  b = Math.abs(a-b);

                  a = t;

            }

            return b;

    }

    var x=prompt("输入两个数字用/隔开");

        var y = x.split("/"),

        a = y[0],

        b = y[1];

    document.write(a+"跟"+b+"最大公约数是:"+gys(a,b));

        第四种:递归实现

      function gys(a,b){

              var x=a%b;   

              if(x==0){

                  return b;

              }

              a = b;

              b = x;

              x = a%b;

                return gys(a,b);

        }

    var x=prompt("输入两个数字用/隔开");

        var y = x.split("/"),

        a = y[0],

        b = y[1];

        document.write(a+"跟"+b+"的最大公约数是:"+gys(a,b));


        </script>

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容