답변 3개
채택된 답변
+20 포인트
4년 전
최대공약수, 최소공배수
https://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=13184
</p>
<p><?php
$a=mt_rand(1,9);
$b=mt_rand(1,9);
$c=mt_rand(1,9);
$d=mt_rand(1,9);</p>
<p>$e = min(array($a,$b));
$f = max(array($a,$b));
$g = min(array($c,$d));
$h = max(array($c,$d));</p>
<p>echo $a.' '.$b.' '.$c.' '.$d.'
';
echo $e.' '.$f.' '.$g.' '.$h.'
';</p>
<p>// 최대공약수
function gcd($a, $b) {
return ($b) ? gcd($b,$a%$b) : $a;
}
// 최소공배수
function lcm($a, $b) {
return $a * $b / gcd($a, $b);
}</p>
<p>$x = lcm($f, $h);
echo 'lcm: '.$x.'
';</p>
<p>$i = $e * ($x/$f);
$j = $g * ($x/$h);
echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($i + $j) . '/' . $x .'
';</p>
<p>$k = floor(($i + $j) / $x);
echo $i.'/'.$x.' + '.$j.'/'.$x.' = ' . ($k ? $k.' & ' : '') . (($i + $j) % $x) . '/' . $x . '
';
</p>
<p>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</p>
<p>
68/56 약분을 해야하는데...
분자와 분모의 최대공약수로 나누면 되겠죠?
gcd(68,56) = 4
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
�
찬돌이
4년 전
댓글을 작성하려면 로그인이 필요합니다.
4년 전
분수 표현은 쉬운 작업이 아닙니다.
https://github.com/markrogoyski/math-php/blob/master/src/Number/Rational.php
https://rosettacode.org/wiki/Convert_decimal_number_to_rational#PHP
참고하세요.
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
더 부탁드려도 될 까요
분자와 분모 같은 숫자 일 경우에는 mt_rand() 다시 발생하여
다른 숫자일 경우에만 처리 했으면 합니다.