1. 首页
  2. R语言

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

经历了前面两个小挑战,你应该对R有点理解了。我们继续推进,今天的问题有点点复杂,复杂的不是R,而是一个数学概念:质数和质因子。任何一个合数都可以被几个质数所分解,这个性质很重要,我们将用它来解决Project Euler的第三个问题。还是和之前一样的,你需要自己在R控制台中敲打下面这些命令,根据结果自行揣摩其用处。

# 预备练习,学习for循环、建立自定义函数和其它一些函数for (n in 1:10) {print(sqrt(n))}x <- c(‘hello’,'world’,'I’,'love’,'R’)for (n in x) {print(n)}x <- seq(from=1,to=10,by=1)print(x)x <- seq(from=1,to=10,by=2)print(x)x <- seq(from=1,to=2,length.out=10)print(x)round(x)x > 1.5all(x>1.5)any(x>1.5)# 如何自定义一个求圆面积的函数myfunc <- function(r) {area <- pi*r^2return(area)}print(myfunc(4))# 同时求四个不同半径圆的面积r <- c(2,2,4,3)sapply(X=r,FUN=myfunc)# Project Euler 3# 找到600851475143这个数的最大质因子# 先建立一个函数以判断某个数是否为质数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)}# 列出1到100的质数,看函数对不对x = 1:100x[sapply(x,findprime)]# 寻找最大的质因子n <- 600851475143for (i in seq(from=3, to=round(sqrt(n)), by=2)) {if (findprime(i) & n %% i == 0) {n <- n / iprime.factor <- iif (i >= n)break}}print(prime.factor) 最后的结果是6857。本例中除了使用for循环外,还见到了sapply函数,这是R语言中非常重要的一类向量化计算函数。求质数的方法可以参考这个文章,本例使用的是其中的境界4。实际上根据质因子的性质,本例不一定非要建立判断质数的函数,不过这个函数我们在后面会用到的。另外如果你想用其它软件找这个数字的质因子,也可以看看这里。

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

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

联系我们

4000-51-9191

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

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