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