# ユークリッドの互除法 Euclidean Algorithm # 引数 自然数 (\@NaturalNumber) # 戻り値 最大公約数 ($EuclideanAlgorithm) sub EUCLIDEANALGORITHM{ my ($NaturalNumber) = @_; my $EuclideanAlgorithm = 0; my $A = 0; my $B = 0; my $Remainder = 0; my $Count = @NaturalNumber - 1; # 配列数の確認 if($Count < 1){ return 0; } # 計算 for(my $i = 0; $i < $Count; $i++){ if($i == 0){ $A = int(abs($NaturalNumber[$i])); $B = int(abs($NaturalNumber[$i + 1])); }else { # 2回目以降$Aは最大公約数を使用 $B = int(abs($NaturalNumber[$i + 1])); } ($A, $B) = ($B, $A) if($A < $B); $Remainder = 1; while($Remainder != 0){ # 余り $Remainder = $A % $B; $A = $B; $B = $Remainder; } } # ユークリッドの互除法 Euclidean Algorithm $EuclideanAlgorithm = $A; return $EuclideanAlgorithm; }