明日の関西コミティア42に、月うさぎプロジェクトとして参加します。
チラシ印刷とデモ版CDの焼き作業中ですが、休憩中に書いてみました。ネタです。

概要

  • アルゴリズムとしてユークリッドの互除法を使用し、2数の最大公約数を求めます。
  • Wikipediaの記事を参考にしました。

実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
@macro name="gcd"
	;[emb exp="'num1:' + mp.num1 + ' num2:' + mp.num2"][r]
	@if exp="mp.num1 < mp.num2"
		@eval exp="mp.tmp = mp.num2"
		@eval exp="mp.num2 = mp.num1"
		@eval exp="mp.num1 = mp.tmp"
	@endif
	@if exp="mp.num2 == 0"
		@emb exp="mp.num1"
	@else
		@eval exp="mp.tmp = mp.num2"
		@eval exp="mp.num2 = mp.num1 % mp.num2"
		@eval exp="mp.num1 = mp.tmp"
		@gcd *
	@endif
@endmacro

1071 と 1029 の最大公約数は 
@gcd num1=1071 num2=1029
です。