1. 首页
  2. R语言

【学习】笨办法学R编程(四)

随着教程推进,基本的语法都接触得差不多了。当要解决某个具体问题时,只需要考虑用什么样的算法来整合运用这些函数和表达式。今天来解决Project Euler的第五个问题,该问题可以用很笨的暴力搜索法子来作,但是更聪明的作法是采用质因子分解的思路。即任何一个合数都可以分解为质数的乘积。为了完成这个题目,还需要学习一点点矩阵,以及和sapply函数相似的另一个函数apply。

# 预备练习mat <- matrix(1:12,ncol=4)print(mat)t(mat)colnames(mat) <- c(‘one’,'two’,'three’,'four’)rownames(mat) <- c(‘a’,'b’,'c’)print(mat)apply(mat,1,sum)apply(mat,2,sum)sum(apply(mat,2,sum))prod(apply(mat,2,sum))# 之前建立的判断是否为质数的函数findprime <- function(x) {if (x %in% c(2,3,5,7)) return(TRUE)if (x%%2 == 0 | x==1) return(FALSE)xsqrt <- round(sqrt(x))xseq <- seq(from=3,to=xsqrt,by=2)if (all(x %% xseq !=0)) return(TRUE)else return(FALSE)}x = 1:20prime <- x[sapply(x,findprime)]# 欧拉问题五,寻找最小的能被1到20所整除的数。# 建立分解质因子的函数primefactor <- function(x,prime) {m <- length(prime)fac.count <- numeric(m)names(fac.count) <- primefor (i in 1:m) {prime.num <- prime[i]while (x %% prime.num == 0 & x !=1 ) {fac.count[i] <- fac.count[i] + 1x = x / prime.num}}return(fac.count)}# 上面的函数负责对一个20以下的数分解为多个质数之积# 返回每个质因子对应的自乘次数primefactor(18,prime)# 对1到20每个数进行质因子分解,形成一个表格result <- t(sapply(1:20,primefactor,prime))# 求每列的极大值prime.power <- apply(result,2,max)prod(prime^prime.power) 最终结果是232792560

原文始发于微信公众号(PPV课数据科学社区):【学习】笨办法学R编程(四)

原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/31295

联系我们

4000-51-9191

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息