简化分数

Ste*_*ins 9 php

如何在PHP中简化一小部分?

例如,转换40/1002/5.

我能想到的唯一方法是对两个数字进行素数分解并比较结果,但我不确定如何做到这一点.

Nie*_*sol 24

简化分数时,将分子和分母除以它们的最大公约数.

所以你需要的只是计算两个数字的GCD.没有内置函数,但实现欧几里德算法很容易:

function gcd($a,$b) {
    $a = abs($a); $b = abs($b);
    if( $a < $b) list($b,$a) = Array($a,$b);
    if( $b == 0) return $a;
    $r = $a % $b;
    while($r > 0) {
        $a = $b;
        $b = $r;
        $r = $a % $b;
    }
    return $b;
}
Run Code Online (Sandbox Code Playgroud)

然后将顶部和底部分开.

function simplify($num,$den) {
    $g = gcd($num,$den);
    return Array($num/$g,$den/$g);
}
var_export(simplify(40,100)); // Array(2,5)
Run Code Online (Sandbox Code Playgroud)