>Eratosthenes <- function(n) {
+ if (n>2) {
+ sieve <- seq(2,n)
+ primes <- c()
+ for ( i in seq(2,n)) {
+ if (any(sieve == i)) { #我主要不明白这3行,能说详细些吗
+ primes <- c ( primes, i) #我主要不明白这3行
+ sieve <- c ( sieve[(sieve %% i ) != 0 ], i) #我主要不明白这3行
+ }
+ }
+ return( primes)
+ } else {说input至少是2而已}
+ }
example
> Eratosthenes (50
[1] 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
整个这段代码是找出所有比n小的质数
还是很混乱。。。能说下这个logic或者流程是怎样的吗
追答ok,理解的关键是sieve里的值随着循环是一个越来越少,第一个循环,n=2,primes = c(2), sieve <- 之后,所以2的倍数都被移走,但是把i留下(这一句其实有错误,i不需要了,因为已经在primes里了)可以改成
sieve <- c(sieve[(seive %% i) != 0])第二个循环,i=3,i还在sieve里,所以这一次把3的倍数都移走了。
第三步,i=4,i不再在sieve里了(第一步的时候4是2的倍数已经被移走了)
...