もくじ
ユークリッドの互除法
コード実装
https://github.com/yuukanehiro/AlgorithmsDataStructure/blob/main/Theorem/EuclideanAlgorithm.php
<?php $flag = false; $number1 = 465; $number2 = 360; main($flag, $number1, $number2); function main(bool $flag = true, int $number1, int $number2) { switch ($flag) { // テスト case 0: testEuclideanAlgorithm(); break; // 実行 case 1: $answer = euclideanAlgorithm($number1, $number2); printf("「%d / %d」の最大公約数は%dです", $number1, $number2, $answer); break; } } /** * ユークリッドの互除法 */ function euclideanAlgorithm(int $number1, int $number2) { if ($number1 < $number2) { echo '入力値異常エラー。ユークリッドの互除法の前提条件は $number1 >= $number2 です。'; return null; } $remainder = $number1 % $number2; echo "{$number1} % {$number2} 余り「{$remainder}」\n"; if ($remainder === 0) { return $number2; } return euclideanAlgorithm($number2, $remainder); } /** * テストコード */ function testEuclideanAlgorithm() { $items = [ [3355, 2379], [1617, 273], ]; foreach ($items as $item) { euclideanAlgorithm($item[0], $item[1]); $answer = euclideanAlgorithm($item[0], $item[1]); printf("「%d / %d」の最大公約数は%dです\n\n", $item[0], $item[1], $answer); } // 3355 % 2379 余り「976」 // 2379 % 976 余り「427」 // 976 % 427 余り「122」 // 427 % 122 余り「61」 // 122 % 61 余り「0」 // 3355 % 2379 余り「976」 // 2379 % 976 余り「427」 // 976 % 427 余り「122」 // 427 % 122 余り「61」 // 122 % 61 余り「0」 // 「3355 / 2379」の最大公約数は61です // 1617 % 273 余り「252」 // 273 % 252 余り「21」 // 252 % 21 余り「0」 // 1617 % 273 余り「252」 // 273 % 252 余り「21」 // 252 % 21 余り「0」 // 「1617 / 273」の最大公約数は21です }