前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【学习】笨办法学R编程(四)

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

作者头像
小莹莹
发布2018-04-18 17:56:20
5230
发布2018-04-18 17:56:20
举报

随着教程推进,基本的语法都接触得差不多了。当要解决某个具体问题时,只需要考虑用什么样的算法来整合运用这些函数和表达式。今天来解决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:20 prime <- x[sapply(x,findprime)] # 欧拉问题五,寻找最小的能被1到20所整除的数。 # 建立分解质因子的函数 primefactor <- function(x,prime) { m <- length(prime) fac.count <- numeric(m) names(fac.count) <- prime for (i in 1:m) { prime.num <- prime[i] while (x %% prime.num == 0 & x !=1 ) { fac.count[i] <- fac.count[i] + 1 x = 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档