LCM

引数に指定した配列の最小公倍数(Least Common Multiple)を求めます。

構文
  1. Double = LCM( arr )
引数
arr
配列
戻値
最小公倍数

プログラム

//////////////////////////////////////////////////
// 【引数】
//   arr : 配列 
// 【戻値】
//   最小公倍数 
//////////////////////////////////////////////////
FUNCTION LCM(arr[])
	DIM c = LENGTH(arr)
	DIM arr2[] = arr[c-1], arr[c-2]
	DIM rem = arr[c-1] * arr[c-2] / GCD(arr2)
	IFB c = 2 THEN
		RESULT = rem
		EXIT
	ENDIF
	arr[c-2] = rem
	RESIZE(arr, c-2)
	RESULT = LCM(arr)
FEND

//////////////////////////////////////////////////
// 【引数】
//   arr : 最大公約数を求める数値を格納した配列 
// 【戻値】
//   最大公約数 
//////////////////////////////////////////////////
FUNCTION GCD(arr[])
	DIM c = LENGTH(arr)
	DIM rem = arr[c-1] MOD arr[c-2]
	IFB rem = 0 THEN
		IFB LENGTH(arr) = 2 THEN
			RESULT = arr[c-2]
			EXIT
		ENDIF
		RESIZE(arr, c-2)
		RESULT = GCD(arr)
		EXIT
	ENDIF
	arr[c-1] = arr[c-2]
	arr[c-2] = rem
	RESULT = GCD(arr)
FEND

解説

  1. 2行目
    	DIM c = LENGTH(arr)
    
  2. 3行目
    	DIM arr2[] = arr[c-1], arr[c-2]
    
  3. 4行目
    	DIM rem = arr[c-1] * arr[c-2] / GCD(arr2)
    
  4. 5-8行目
    	IFB c = 2 THEN
    		RESULT = rem
    		EXIT
    	ENDIF
    
  5. 9行目
    	arr[c-2] = rem
    
  6. 10行目
    	RESIZE(arr, c-2)
    
  7. 11行目
    	RESULT = LCM(arr)
    

プログラム実行例

最小公倍数を求めます

3と8の最小公倍数を求めます。

DIM arr[] = 3, 8
PRINT LCM(arr)

//////////////////////////////////////////////////
// 【引数】
//   arr : 最大公約数を求める数値を格納した配列 
// 【戻値】
//   最大公約数 
//////////////////////////////////////////////////
FUNCTION GCD(arr[])
	DIM c = LENGTH(arr)
	DIM rem = arr[c-1] MOD arr[c-2]
	IFB rem = 0 THEN
		IFB LENGTH(arr) = 2 THEN
			RESULT = arr[c-2]
			EXIT
		ENDIF
		RESIZE(arr, c-2)
		RESULT = GCD(arr)
		EXIT
	ENDIF
	arr[c-1] = arr[c-2]
	arr[c-2] = rem
	RESULT = GCD(arr)
FEND

//////////////////////////////////////////////////
// 【引数】
//   arr : 配列 
// 【戻値】
//   最小公倍数 
//////////////////////////////////////////////////
FUNCTION LCM(arr[])
	DIM c = LENGTH(arr)
	DIM arr2[] = arr[c-1], arr[c-2]
	DIM rem = arr[c-1] * arr[c-2] / GCD(arr2)
	IFB c = 2 THEN
		RESULT = rem
		EXIT
	ENDIF
	arr[c-2] = rem
	RESIZE(arr, c-2)
	RESULT = LCM(arr)
FEND
  1. udf.lcm(2)
結果
24
解説
  1. 1行目
    DIM arr[] = 3, 8
    
    最小公倍数を求める数値を配列に格納します。
  2. 2行目
    PRINT LCM(arr)
    
    LCM関数で最小公倍数を求めて出力します。
-PR-