primes <- c(primes, i) # 把i放到prime里
sieve <- c(sieve[(seive %% i) != 0], i) #把所有sieve里i的整數(shù)倍數(shù)(除了i)取走
# %%是mod, 余數(shù),所以 sieve[seive%%i) !=0]是所有seive里除以i余數(shù)不為0的數(shù)
}
整個(gè)這段代碼是找出所有比n小的質(zhì)數(shù)
還是很混亂。。。能說下這個(gè)logic或者流程是怎樣的嗎
ok,理解的關(guān)鍵是sieve里的值隨著循環(huán)是一個(gè)越來越少,第一個(gè)循環(huán),n=2,primes = c(2), sieve <- 之后,所以2的倍數(shù)都被移走,但是把i留下(這一句其實(shí)有錯(cuò)誤,i不需要了,因?yàn)橐呀?jīng)在primes里了)可以改成
sieve <- c(sieve[(seive %% i) != 0])
第二個(gè)循環(huán),i=3,i還在sieve里,所以這一次把3的倍數(shù)都移走了。
第三步,i=4,i不再在sieve里了(第一步的時(shí)候4是2的倍數(shù)已經(jīng)被移走了)
...