最大公約数・最小公倍数の求め方。

ユークリッド互除法による最大公約数の求め方。
大きい方から小さい方を引き,小さい方の数と引いてできた数で同様に引いていく. 同じ数字が並んだら答. 例) 18と10の場合 18-10=8 10-8=2 8-2=6 6-2=4 4-2=2 -> 同じ数(2)が続いたので答え! 答え:2 最小公倍数の求め方。 AB=GL から求める ※(Gは最大公約数,Lは最小公倍数) つまり、L=AB/G 上記の場合、最大公約数は2であるため、 AB=18*10=180/2=90 答え:90
active perl は無料で公開されております。
昔なら、BASICで作成していたのですが、現在のPCではBASICは搭載されていないので、
入手可能な言語ということで、active perl をチョイスしました。

以下、active perl で書いたサンプルです。

#!perl
#euclidean.pl
#ユークリッド互除法による最大公約数の求め方。
#大きい方から小さい方を引き,小さい方の数と引いてできた数で同様に引いていく.
#同じ数字が並んだら答.
#例)
#18と10の場合
#18-10=8
#10-8=2
#8-2=6
#6-2=4
#4-2=2 -> 同じ数(2)が続いたので答え!
#答え:2
#
#最小公倍数の求め方。
#AB=GL から求める                    ※(Gは最大公約数,Lは最小公倍数)
#つまり、L=AB/G
#上記の場合、最大公約数は2であるため、
#AB=18*10=180/2=90
#答え:90

my $a1;
my $b1;
my $a = 12;
my $b = 69;
my $d = -1;
my $n = 0;
my $g;
my $l;

print "二つの数をコンマで区切って入力してください。:";
my $kin = <STDIN>;
($a,$b) = split(/,/,$kin);
chomp($a);
chomp($b);
my $aa = $a;
my $bb = $b;
if ($a * $b == 0 ) {
	print "入力値エラー\n";
	exit;
}
if ($a == $b) {
	$g = $a;
	$l = $a;
	goto answer;
}
print "A=$aとB=$bの最大公約数/最小公倍数を求めます。\n";

while ($n != $d){
	if ($a > $b) {
		$d = $a - $b;
		$n = $b;
		$a1 = $n;
		$b1 = $d;
		print "($a,$b)->$a-$b=$d\n";
		$a = $a1;
		$b = $b1
	} else {
		$d = $b - $a;
		$n = $a;
		$a1 = $n;
		$b1 = $d;
		print "($a,$b)->$a-$b=$d\n";
		$a = $a1;
		$b = $b1
	}
}
print "($a,$b)\n";

$g = $n;
$l = $aa*$bb/$n;

answer:

printf "$aaと$bbの\n";

printf "最大公約数:$g\n";

printf "最小公倍数:$aax$bb/$n=$l\n";
※2013/08/19 に print "二つの数をコンマで区切って入力してください。:"; my $kin = <STDIN> の部分を修正しました。_o_
※2016/12/28 にSTDINの行末にセミコロンを追加
リンク
active perl
active perl の入手先リンク(ダウンロード)
HOME