本ページには広告が含まれています。
			
						
			
				
				
引数に指定した配列の最小公倍数(Least Common Multiple)を求めます。
- 構文
- Double = LCM( array )
 
- 引数
- array 必須
- 最小公倍数を求める数値を格納した配列
 
- 戻り値
- 最小公倍数
プログラム
//////////////////////////////////////////////////
// 【引数】
//   array : 最小公倍数を求める数値を格納した配列 
// 【戻り値】
//   最小公倍数 
//////////////////////////////////////////////////
FUNCTION LCM(array[])
	DIM c = LENGTH(array)
	DIM array2[] = array[c-1], array[c-2]
	DIM rem = array[c-1] * array[c-2] / GCD(array2)
	IFB c = 2 THEN
		RESULT = rem
		EXIT
	ENDIF
	array[c-2] = rem
	RESIZE(array, c-2)
	RESULT = LCM(array)
FEND
//////////////////////////////////////////////////
// 【引数】
//   array : 最大公約数を求める数値を格納した配列 
// 【戻り値】
//   最大公約数 
//////////////////////////////////////////////////
FUNCTION GCD(array[])
	DIM c = LENGTH(array)
	DIM rem = array[c-1] MOD array[c-2]
	IFB rem = 0 THEN
		IFB LENGTH(array) = 2 THEN
			RESULT = array[c-2]
			EXIT
		ENDIF
		RESIZE(array, c-2)
		RESULT = GCD(array)
		EXIT
	ENDIF
	array[c-1] = array[c-2]
	array[c-2] = rem
	RESULT = GCD(array)
FEND解説
- 2行目
- arrayの要素数を変数cに代入。DIM c = LENGTH(array)
 
- 3行目
- 配列arrayのc-1番目とc-2番目を格納した配列array2を生成。DIM array2[] = array[c-1], array[c-2]
 
- 4行目
- 配列arrayのc-1番目とc-2番目の積をarray2の最大公約数で割り、その結果を変数remに代入。DIM rem = array[c-1] * array[c-2] / GCD(array2)
 
- 5-8行目
- cが2ならremを戻り値として返し終了する。IFB c = 2 THEN RESULT = rem EXIT ENDIF
 
- 9行目
- 配列arrayのc-2番目にremを代入。array[c-2] = rem
 
- 10行目
- 配列arrayのサイズをc-2に変更する。RESIZE(array, c-2)
 
- 11行目
- LCM関数を再帰呼び出し。RESULT = LCM(array)
 
最小公倍数
2つ以上の正の整数についてそのどれもが割り切れる整数(倍数)を初めの整数の公倍数といい、公倍数のなかで0ではない最小の数を最小公倍数といいます。
2つの自然数\(a\),\(b\)の最大公約数をGCD、最小公倍数をLCMとすると以下の関係が成り立ちます。
POINT
	\[LCM(a, b) = \frac{a \times b}{GCD(a, b)}\]
最大公約数GCDはユークリッドの互除法を使うことで求めることができます。GCD関数 (自作関数)を参照してください。
プログラム実行例
最小公倍数を求めます
3と8の最小公倍数を求めます。
DIM array[] = 3, 8
PRINT LCM(array)
//////////////////////////////////////////////////
// 【引数】
//   array : 最大公約数を求める数値を格納した配列 
// 【戻り値】
//   最大公約数 
//////////////////////////////////////////////////
FUNCTION GCD(array[])
	DIM c = LENGTH(array)
	DIM rem = array[c-1] MOD array[c-2]
	IFB rem = 0 THEN
		IFB LENGTH(array) = 2 THEN
			RESULT = array[c-2]
			EXIT
		ENDIF
		RESIZE(array, c-2)
		RESULT = GCD(array)
		EXIT
	ENDIF
	array[c-1] = array[c-2]
	array[c-2] = rem
	RESULT = GCD(array)
FEND
//////////////////////////////////////////////////
// 【引数】
//   array : 最小公倍数を求める数値を格納した配列 
// 【戻り値】
//   最小公倍数 
//////////////////////////////////////////////////
FUNCTION LCM(array[])
	DIM c = LENGTH(array)
	DIM array2[] = array[c-1], array[c-2]
	DIM rem = array[c-1] * array[c-2] / GCD(array2)
	IFB c = 2 THEN
		RESULT = rem
		EXIT
	ENDIF
	array[c-2] = rem
	RESIZE(array, c-2)
	RESULT = LCM(array)
FEND結果
24使用関数
関連記事
- ABS関数 (スクリプト関数)
- 引数の絶対値(\(|x|\))を返します。
- ARCCOS関数 (スクリプト関数)
- 引数の逆余弦を求めます。
- CEIL関数 (スクリプト関数)
- 正の値へ切り上げた数値を返します。
- LN関数 (スクリプト関数)
- 自然対数(\(\log_e{x}\))を求める。
- LOGN関数 (スクリプト関数)
- Baseを底とするXの対数(\(\log_{Base}{x}\))を求める。
- ZCUT関数 (スクリプト関数)
- マイナス値は0にして返します。
- fact関数 (自作関数)
- 引数に指定した数値の階乗を求めます。
- ARCSIN関数 (スクリプト関数)
- 引数の逆正弦を求めます。
- EXP関数 (スクリプト関数)
- 自然指数関数(\(y=e^{x}\))を求める。
- isOdd関数 (自作関数)
- 奇数かどうか調べます。
