> 数学 >
R语言,解释下这code
>Eratosthenes 2) {
+ sieve
人气:480 ℃ 时间:2020-04-06 11:02:57
解答
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的倍数已经被移走了)

...

推荐
猜你喜欢
© 2024 79432.Com All Rights Reserved.
电脑版|手机版