ユークリッドの互除法による最大公約数と最小公倍数 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