ユークリッドの互除法による最大公約数と最小公倍数     Last modified: Jul 10, 2008

目的

ユークリッドの互除法により最大公約数と最小公倍数を求める。

使用法

euclid(m, n)

引数

m, n	252 未満の整数

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/euclid.R", encoding="euc-jp")

euclid <- function(m, n)             # 2^52 未満の 2 つの整数
{
        limit <- 2^52
        stopifnot(is.numeric(m) && is.numeric(n) && m == floor(m) && n == floor(n) && m < limit && n < limit)
        m0 <- m <- abs(m)
        n0 <- n <- abs(n)
        while ((temp <- n %% m) != 0) {
                n <- m
                m <- temp
        }
        lcm <- (m0/m)*n0
        return(list(GCM=m, quotient=c(m0/m, n0/m), LCM=ifelse(lcm > limit, NA, lcm)))
}


使用例

euclid(10, 12)
euclid(1000000000, 272716261712)

出力結果例

> euclid(10, 12)
$GCM		# 最大公約数
[1] 2

$quotient
[1] 5 6		# 引数を GCM で割った商

$LCM		# 最小公倍数
[1] 60

> euclid(1000000000, 272716261712)
$GCM
[1] 16

$quotient
[1]    62500000 17044766357

$LCM
[1] NA		# 答えが整数として表せる範囲を超えると NA を表示する

> library(gmp)
> gcd.bigz(1000000000, 272716261712) # Greatest Common Divisor = Greatest Common Measure
Big Integer ('bigz') :
[1] 16
> gcd(1000000000, 272716261712)
[1] 16
> lcm.bigz(1000000000, 272716261712) # Least Common Multiple = Lowest Common Multiple
Big Integer ('bigz') :
[1] 17044766357000000000


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh