该R如何作用于埃拉托斯烯筛?
我刚开始学习R,当时正在看一段代码,它用埃拉托什尼筛找到素数,直到一些数字n:该R如何作用于埃拉托斯烯筛?,r,R,我刚开始学习R,当时正在看一段代码,它用埃拉托什尼筛找到素数,直到一些数字n: sieve <- function(n) { if (n < 2) return(NULL) a <- rep(T, n) a[1] <- F for(i in seq(n)) { if (a[i]) { j <- i * i if (j > n) return(which(a)) a[seq(j, n, by=i)] &
sieve <- function(n) {
if (n < 2) return(NULL)
a <- rep(T, n)
a[1] <- F
for(i in seq(n)) {
if (a[i]) {
j <- i * i
if (j > n) return(which(a))
a[seq(j, n, by=i)] <- F
}
}
}
sieve忘记代码——你理解sieve本身的逻辑吗?如果没有,那就是开始的地方(这是一本好书)。代码本身是核心算法的一个相当简单的实现。切向上——使用T
和F
作为TRUE
和FALSE
的缩写被认为是有风险的。请参阅(R Bloggers本身对任何学习R的人来说都是一个很好的资源)。尝试使用debug(sieve)
,然后使用sieve(7)
,这样你就可以一次一行地遍历代码(并打印出你感兴趣的任何对象的值)j中的注释约翰·科尔曼在第一条注释中是正确的;我认为埃拉托什尼的筛子使用了不同的算法,阅读维基百科页面澄清了问题。谢谢你的帮助!忘记代码吧——你理解筛子本身的逻辑吗?如果没有,那就是开始的地方(这是一本好书)。代码本身是核心算法的一个相当简单的实现。切向上——使用T
和F
作为TRUE
和FALSE
的缩写被认为是有风险的。请参阅(R Bloggers本身对任何学习R的人来说都是一个很好的资源)。尝试使用debug(sieve)
,然后使用sieve(7)
,这样你就可以一次一行地遍历代码(并打印出你感兴趣的任何对象的值)j中的注释约翰·科尔曼在第一条注释中是正确的;我认为埃拉托什尼的筛子使用了不同的算法,阅读维基百科页面澄清了问题。谢谢你的帮助!
n=10
sieve <- function(n) {
if (n < 2) return(NULL) #ignore inputs that don't return anything
a <- rep(T, n) #TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
a[1] <- F ##to ignore 1? #FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
for(i in seq(n)) {
if (a[i]) { #i.e., for all values but 1
j <- i * i #4 9 16 25...
if (j > n) return(which(a))
a[seq(j, n, by=i)] <- F
}
}
}