1/6 + 2/10 = 11/30
처럼 분수 더하기 분수를 분수로 표현하고 싶습니다.
이때, 숫자를 랜덤으로 발생하여 $a/$b + $c/$d 형식에서
$a=mt_rand(1,9);
$b=mt_rand(1,9);
$c=mt_rand(1,9);
$d=mt_rand(1,9);
$a/$b + $c/$d = e/f
로 표현 할 때 분모가 분수보다 작게 표현 하였으면 합니다.
답변 3개 / 댓글 2개
최대공약수, 최소공배수
https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=13184
<?php
$a=mt_rand(1,9);
$b=mt_rand(1,9);
$c=mt_rand(1,9);
$d=mt_rand(1,9);
$e = min(array($a,$b));
$f = max(array($a,$b));
$g = min(array($c,$d));
$h = max(array($c,$d));
echo $a.' '.$b.' '.$c.' '.$d.'<br>';
echo $e.' '.$f.' '.$g.' '.$h.'<br>';
// 최대공약수
function gcd($a, $b) {
return ($b) ? gcd($b,$a%$b) : $a;
}
// 최소공배수
function lcm($a, $b) {
return $a * $b / gcd($a, $b);
}
$x = lcm($f, $h);
echo 'lcm: '.$x.'<br><br>';
$i = $e * ($x/$f);
$j = $g * ($x/$h);
echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($i + $j) . '/' . $x .'<br>';
$k = floor(($i + $j) / $x);
echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($k ? $k.' & ' : '') . (($i + $j) % $x) . '/' . $x . '<br>';
7 5 8 4
5 7 4 8 // 큰 수를 분모로
lcm: 56 // 7과 8의 최소공배수
40/56 + 28/56 = 68/56 // 분자에 최소공배수를 곱해주고 분모는 최소공배수
40/56 + 28/56 = 1 & 12/56
68/56 약분을 해야하는데...
분자와 분모의 최대공약수로 나누면 되겠죠?
gcd(68,56) = 4
답변에 대한 댓글 1개
($a>$b ? $a/$b : $b/$a) + ($c>$d ? $c/$d : $d/$c)
답변에 대한 댓글 1개
결과 값이 소수로 표현이 되고 있습니다.
결과 값을 분수로 표현 할 수 는 없나요?
답변을 작성하려면 로그인이 필요합니다.
더 부탁드려도 될 까요
분자와 분모 같은 숫자 일 경우에는 mt_rand() 다시 발생하여
다른 숫자일 경우에만 처리 했으면 합니다.