【学习】笨办法学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.5 all(x>1.5) any(x>1.5) # 如何自定义一个求圆面积的函数 myfunc <- function(r) { area <- pi*r^2 return(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:100 x[sapply(x,findprime)] # 寻找最大的质因子 n <- 600851475143 for (i in seq(from=3, to=round(sqrt(n)), by=2)) { if (findprime(i) & n %% i == 0) { n <- n / i prime.factor <- i if (i >= n) break } } print(prime.factor) 最后的结果是6857。本例中除了使用for循环外,还见到了sapply函数,这是R语言中非常重要的一类向量化计算函数。求质数的方法可以参考这个文章,本例使用的是其中的境界4。实际上根据质因子的性质,本例不一定非要建立判断质数的函数,不过这个函数我们在后面会用到的。另外如果你想用其它软件找这个数字的质因子,也可以看看这里。

原文发布于微信公众号 - PPV课数据科学社区(ppvke123)

原文发表时间:2014-05-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏take time, save time

你所能用到的无损压缩编码(二)

     上个月项目荷兰大佬要检查,搞的我想写的东西不断推迟,现在检查完了,我决定继续把我想写的这整个一个系列写完,上一次写的是最简单的无损编码行程编码,这一次...

37790
来自专栏潇涧技术专栏

Python Algorithms - C4 Induction and Recursion and Reduction

Python算法设计篇(4) Chapter 4: Induction and Recursion and Reduction

13730
来自专栏潇涧技术专栏

Python Algorithms - C5 Traversal

Traversal就是遍历,主要是对图的遍历,也就是遍历图中的每个节点。对一个节点的遍历有两个阶段,首先是发现(discover),然后是访问(visit)。遍...

10310
来自专栏人工智能

如何使用tableaux进行逻辑计算

原文作者:Miguel Diaz Kusztrich

92480
来自专栏机器学习算法与Python学习

机器学习(31)之频繁集挖掘FP Tree详解

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 明早7:22推送第2期免费送书活动 ...

43960
来自专栏用户画像

3.3 差错控制

概括地说,传输中的差错都是由于噪声引起的。噪声有两大类:一类是信道中所固定的、持续存在的随机热噪声;另一类是由于外界特定个的短暂原因所造成的冲击噪声。前者可以通...

10220
来自专栏算法channel

玩转Pandas,让数据处理更easy系列6

玩转Pandas系列已经连续推送5篇,尽量贴近Pandas的本质原理,结合工作实践,按照使用Pandas的逻辑步骤,系统地并结合实例推送Pandas的主要常用功...

10420
来自专栏xingoo, 一个梦想做发明家的程序员

剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)

题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和...

219100
来自专栏沈唁志

PHP使用递归算法查找子集获取无限极分类等实操

递归函数是我们常用到的一类函数,最基本的特点是在函数或子过程的内部,直接或者间接地调用自己的算法,但必须在调用自身前有条件判断,否则无限调用下去,也就是所谓的死...

27230
来自专栏用户2442861的专栏

2014美团网笔试题目(总结)

http://blog.csdn.net/wzy_1988/article/details/12438143

20810

扫码关注云+社区

领取腾讯云代金券