目的 整数の約数を求める。素数かどうか判定する。素因子分解を行う。 使用法 is.prime(n) 素数かどうか判定する。 factorization(n, simple=TRUE) 素因子分解を行う。 divisor(n) 整数の約数を求める。 引数 n 整数(233 未満) simple デフォルトでは単純な形式で表示する ソース インストールは,以下の 1 行をコピーし,R コンソールにペーストする source("http://aoki2.si.gunma-u.ac.jp/R/src/divisor.R", encoding="euc-jp") # 整数の約数を見つける divisor <- function(n) # 整数 { if (n >= 2^53) return(NA) # 限界を超えると NA を返す else if (n %% 2 == 0) return(2) else if(n %% 3 == 0) return(3) maxitr <- as.integer(sqrt(n)) i <- 1 repeat { i <- i+4 if (i > maxitr) return(n) else if (n %% i == 0) return(i) i <- i+2 if (i > maxitr) return(n) else if (n %% i == 0) return(i) } } # 素数の判定 is.prime <- function(n) { return(ifelse(n >= 2^53, NA, n == divisor(n))) # 限界を超えると NA を返す } # 素因子分解 factorization <- function(n, simple=TRUE) { if (n >= 2^53) return(NA) # 限界を超えると NA を返す result <- NULL repeat { div <- divisor(n) result <- append(result, div) n <- n/div if (n == 1) break } if (simple) { return(result) } else { result <- table(result) result <- paste(as.integer(names(result)), "^", result, collapse=" * ") result <- gsub("\\^ 1 ", "", result) result <- sub(" \\^ 1$", "", result) return(result) } } 使用例 is.prime(97) is.prime(123456) factorization(123456) factorization(123456, simple=FALSE) divisor(123456) 出力結果例 > is.prime(97) [1] TRUE > is.prime(123456) [1] FALSE > factorization(123456) [1] 2 2 2 2 2 2 3 643 > factorization(123456, simple=FALSE) [1] "2 ^ 6 * 3 * 643" > divisor(123456) [1] 2 > x <- 2:10000 # 10000 未満の素数のリスト > x[sapply(x, is.prime)] [1] 2 3 5 7 11 13 17 19 23 29 [11] 31 37 41 43 47 53 59 61 67 71 [21] 73 79 83 89 97 101 103 107 109 113 [31] 127 131 137 139 149 151 157 163 167 173 [41] 179 181 191 193 197 199 211 223 227 229 以下略