PHP求最大公约数和最小公倍数的最优算法

小天天天天    PHP    999+ 次    2017-08-15 10:24:53


求一个数的最大公约数和最小公倍数:一般算法是采供for循环,单数for循环效率太低,所以我把两种都贴出来,备忘:

这是html部分:

<html>
    <head>
        <meta charset="utf-8" />
        <title>求最大公约数和最小公倍数</title>
    </head>
    <body>
        <form action="" method="post" >
        <input type="text" name="num1" size="3"/>和
        <input type="text" name="num2" size="3"/>
        <input type="submit" value="计算" />
        
        </form>
    </body>
</html>


这是方法1:

function maxgongyueshu($array) {
    if ($array[0]<$array[1]) {
        $arr=array();
        for ($i = 1; $i <=$array[1]; $i++) {
            if ($array[0]%$i==0&&$array[1]%$i==0){
                array_push($arr, $i);
            }
        }
        return $arr[count($arr)-1];
    }else if($array[0]>$array[1]){
        $arr=array();
        for ($i = 1; $i <=$array[1]; $i++) {
            if ($array[0]%$i==0&&$array[1]%$i==0){
                array_push($arr, $i);
            }
        }
        return $arr[count($arr)-1];
    }else {
        return $array[1];
    }
}
function mingongbeishu($array) {
    if ($array[0]>$array[1]) {
        for ($i = $array[0]; $i>=$array[1]; $i++) {
            if ($i%$array[0]==0&&$i%$array[1]==0) {
                return $i;
            }
        }
    }else if ($array[0]<$array[1]) {
        for ($i = $array[1]; $i>=$array[0]; $i++) {
            if ($i%$array[1]==0&&$i%$array[0]==0) {
                return $i;
            }
        }
    }else {
        return $array[0];
    }
        
}

if (!empty($_POST['num1'])&&!empty($_POST['num2'])) {
    $num1=$_POST['num1'];
    $num2=$_POST['num2'];
    $array=array($num1,$num2);
    echo "最大公约数是".maxgongyueshu($array);
    echo "最小公倍数是".mingongbeishu($array);
}


这是方法二:

<?php
//header("Content-type: text/html; charset=utf-8");
function maxgongyueshu($num1, $num2) {
    $temp=0;
    while ($num2 != 0) {
        $temp = $num1 % $num2;
        $num1 = $num2;
        $num2 = $temp;
    }
    return $num1;
}
function mingongbeishu($num1, $num2) {
    $gys = maxgongyueshu($num1,$num2);
    $gbs = ($num1 * $num2) / $gys;
    return $gbs;
}
echo "最大公约数为:".maxgongyueshu(8645640, 100165465);
echo "<br />";
echo"最小公倍数为:". mingongbeishu(8645640, 100165465);

?>

第二种方法才用的是欧几里得算法,效率极高.


如果你觉得本篇文章对您有帮助,请打赏作者

上一篇: PHP中使用递归思想解猴子吃桃问题

下一篇: 防止网站运行PHP木马脚本的有效防范措施

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:483

今日UV/PV/IP:15/15/15

昨日UV/PV/IP:19/22 /19

TOP