求一个数的最大公约数和最小公倍数:一般算法是采供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); ?>
第二种方法才用的是欧几里得算法,效率极高.