随着教程推进,基本的语法都接触得差不多了。当要解决某个具体问题时,只需要考虑用什么样的算法来整合运用这些函数和表达式。今天来解决Project Euler的,该问题可以用很笨的暴力搜索法子来作,但是更聪明的作法是采用的思路。即任何一个合数都可以分解为质数的乘积。为了完成这个题目,还需要学习一点点矩阵,以及和sapply函数相似的另一个函数apply。 最终结果是232792560 from 数据科学与R语言 http://xccds1977.blogspot.com/
# 预备练习 mat <- (1:12,=4) (mat) (mat) (mat) <- ('one','two','three','four') (mat) <- ('a','b','c') (mat) (mat,1,) (mat,2,) ((mat,2,)) ((mat,2,)) # 之前建立的判断是否为质数的函数 findprime <- (x) { if (x %in% (2,3,5,7)) (TRUE) if (x%%2 == 0 | x==1) (FALSE) xsqrt <- ((x)) xseq <- (from=3,to=xsqrt,=2) if ((x %% xseq !=0)) (TRUE) else (FALSE) } x = 1:20 prime <- x[(x,findprime)] # 欧拉问题五,寻找最小的能被1到20所整除的数。
# 建立分解质因子的函数 primefactor <- (x,prime) { m <- (prime) fac.count <- (m) (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 } } (fac.count) } # 上面的函数负责对一个20以下的数分解为多个质数之积 # 返回每个质因子对应的自乘次数 primefactor(18,prime) # 对1到20每个数进行质因子分解,形成一个表格 result <- ((1:20,primefactor,prime)) # 求每列的极大值 prime.power <- (result,2,) (prime^prime.power)