くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

【吉里吉里】kAG3のマクロで最大公約数を求める

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

ネタです。

概要

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

実装

@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
です。