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

JavaScript044

浅谈JS实现最大公约数的几种方法,第1张

<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=ai>0i--){//因为是最大公约数,所以从大到小计算

              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=bb=xx=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>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

</head>

<body>

<script type="text/javascript">

function getgongyueshu(a, b) {

if(b == 0 || a==0) {

return 0

}

return getgongyueshu(b, a % b)

}

var a = 8693724

var b = 92356

var gongyueshu = getgongyueshu(b, a)

console.log(a + "和" + b + "的" + "最大公约数是:" + gongyueshu)

var gongbeishu = a * b / gongyueshu

console.log(a + "和" + b + "的" + "最小公倍数是:" + gongbeishu)

</script>

</body>

</html>

<script language="javascript">function getSpecialNum(num1,num2,num3){

var max=num1

var min=num1

var specilanum=new Object()

if(num1<1||num2<1||num3<1){

specilanum.GCM=-1

specilanum.LCM=-1

return specilanum

}

if(num2>num1)max=num2

if(max<num3)max=num3

if(num2<num1)min=num2

if(num3<min)min=num3

for(var i=mini>0i--){

if(num1%i==0&&num2%i==0&&num3%i==0){

specilanum.GCM=i

break

}

}

for(var i=maxi<=num1*num2*num3i++){

if(i%num1==0&&i%num2==0&&i%num3==0){

specilanum.LCM=i

break

}

}

return specilanum

}

</script>

调用该js函数,传递三个数字,会返回一个js对象,这个对象的属性LCM表示最小公倍数,GCM表示最大公约数。

var result=getSpecialNum(3,5,15)

alert(result.LCM)//弹出最小公倍数

alert(result.GCM)//弹出最大公约数