リプタクのもう覚えられません
Google
Web サイト内
topmemo ▶ 最大公約数 算出サンプルVer_1.0

ActionScript

最大公約数 算出サンプルVer_1.0

ActionScriptで最大公約数を求めるサンプル。

JavaScriptを有効にし、最新のFlashPlayerをインストールお願いしますGet Adobe Flash player

<メモ>
for文(繰り返し)で約数を地道に1減らしながら計算させている為、値の大きい素数(1と自身の値以外約数を持たない)では処理に時間が掛かる仕様。
ユークリッドの互除法を用いれば、処理回数を減らす事が可能とおもわれるが、ダメな例としてActionScript3.0ソースを残しておく。
ユークリッドの互除法を用いたサンプルは、Riptac 最大公約数 算出サンプルVer_2.0参照。

【ActionScript3.0 サンプルソース】

stop();

//変数
var atai_lo:uint;//値小
var atai_hi:uint;//値大
var yaku_max:uint;//最大公約数

//入力できる文字の設定
tf1.restrict = "0-9";//値1
tf2.restrict = "0-9";//値2

//初期表示テキスト
tf1.text = String(atai_lo);
tf2.text = String(atai_hi);
tf3.text = String(yaku_max);

//テキストが入力される度に実施
tf1.addEventListener(Event.CHANGE,f_1);
tf2.addEventListener(Event.CHANGE,f_1);
function f_1(e:Event):void {
	//値の取得
	if (uint(tf1.text) <= uint(tf2.text)) {
		atai_lo = uint(tf1.text);
		atai_hi = uint(tf2.text);
	} else {
		atai_lo = uint(tf2.text);
		atai_hi = uint(tf1.text);
	}
	yaku_max = 0;//最大公約数の初期化

	//最大公約数を求める式
	for (var i:uint=1; yaku_max == 0; i++) {//最大公約数が0のまま なら繰り返す 
		
		//強制終了処理(値0はありえない)
		if (atai_lo==0 || atai_hi==0) {
			break;
		}
		
		//時短処理(値/2より大きい約数は値以外の約数は存在しないため)
		if (i > atai_lo/2) {
			yaku_max=1;
		}
		
		//値小に約数が存在し、その約数で値大が割り切れるなら
		if (atai_lo%i==0 && atai_hi%(atai_lo/i)==0) {
			yaku_max = atai_lo/i;
		}
	}
	
	//出力
	tf3.text = String(yaku_max);
}
last update 2009.6.13
参考・出典等
Riptac 最大公約数 算出サンプルVer_2.0
ユークリッドの互除法 - Wikipedia

▲page top

topmemogalleryblogtestaboutlinksmail
Copylight(C)2008-2009 Riptac. All Rights Reserved.