【吉里吉里】kAG3のマクロで最大公約数を求める
明日の関西コミティア42に、月うさぎプロジェクトとして参加します。
チラシ印刷とデモ版CDの焼き作業中ですが、休憩中に書いてみました。
ネタです。
概要
- アルゴリズムとしてユークリッドの互除法を使用し、2数の最大公約数を求めます。
- Wikipediaの記事を参考にしました。
- http://ja.wikipedia.org/wiki/ユークリッドの互除法
実装
@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 です。