思路
-
使用递归求最大公约数
最大公约数的递归: 1、若a可以整除b,则最大公约数是b 2、如果步骤1不成立,最大公约数便是b与a%b的最大公约数 示例:求(140,21) 140%21 = 14 21%14 = 7 14%7 = 0 返回7
实现
-
最大公约数
/** * 求最大公约数 Greatest Common Divisor(GCD) * @param $a * @param $b * @return mixed */ function gcd($a, $b) { // 防止因除数为0而崩溃 if ($a == 0 || $b == 0) { return 1; } if ($a % $b == 0) { return $b; } return gcd($b, $a % $b); }
-
格式化比例值
/** * 格式化比例值 * @param $value1 * @param $value2 * @param $gcd * @return string */ function proportion($value1, $value2, $gcd) { if ($gcd == 0) { return strval($value1) . " : " . strval($value2); } return strval($value1/$gcd) . " : " . strval($value2/$gcd); }
使用
-
例子
$value1 = 435; $value2 = 300; $gcd = gcd($value1, $value2); echo $gcd; // 输出 15 echo proportion($value1,$value2, $gcd); // 输出 29 : 20 // 除数为0 $value2 = 0; $gcd = gcd($value1, $value2); echo $gcd; // 输出 1 echo proportion($value1,$value2, $gcd); // 输出 435 : 0