Eratosthenes' sil i python
Lagt inn: 04/08-2014 23:21
Hei, det er en liten ting jeg lurer på. Nedenfor er det en kode, jeg skjønner hva koden gjør, men det er noen matematiske ting jeg lurer på.
1. For-løkkens grense går fra 2 til "sqrtn + 1". Men hvorfor er det til roten av n + 1 og ikke bare n+1?
2. I if-setningen står det "s[i*i:np1:1] = .... " Her bruker det "list slice" (vet ikke hav det heter på norsk, men hvofor starter det fra i*i ?
Håper dere skjønner hva jeg mener :]
Kode: Velg alt
def sieve(n):
np1 = n + 1
s = list(range(np1))
s[1] = 0
sqrtn = int(round(n**0.5))
for i in range(2, sqrtn + 1):
if s[i]:
s[i*i: np1: i] = [0] * len(range(i*i, np1, i))
return filter(None, s)
2. I if-setningen står det "s[i*i:np1:1] = .... " Her bruker det "list slice" (vet ikke hav det heter på norsk, men hvofor starter det fra i*i ?
Håper dere skjønner hva jeg mener :]