R语言,解释下这code
来源:学生作业帮 编辑:大师作文网作业帮 分类:数学作业 时间:2024/11/12 07:51:10
R语言,解释下这code
>Eratosthenes 2) {
+ sieve
>Eratosthenes 2) {
+ sieve
if (any(sieve ==i)) { # 如果i在sieve里 也可以写成 if ( i %in% sieve ) {
primes <- c(primes, i) # 把i放到prime里
sieve <- c(sieve[(seive %% i) != 0], i) #把所有sieve里i的整数倍数(除了i)取走
# %%是mod, 余数,所以 sieve[seive%%i) !=0]是所有seive里除以i余数不为0的数
}
整个这段代码是找出所有比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的倍数已经被移走了)...
primes <- c(primes, i) # 把i放到prime里
sieve <- c(sieve[(seive %% i) != 0], i) #把所有sieve里i的整数倍数(除了i)取走
# %%是mod, 余数,所以 sieve[seive%%i) !=0]是所有seive里除以i余数不为0的数
}
整个这段代码是找出所有比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的倍数已经被移走了)...