Sieve of Pritchard: Difference between revisions
Content added Content deleted
(→C#: Small shortcut, explanation expanded) |
(→Python: Started by noticing that the max() should be a min(), then noticed there was some other places that could be made more efficient.) |
||
Line 185: | Line 185: | ||
while prime * prime <= limit: |
while prime * prime <= limit: |
||
if steplength < limit: |
if steplength < limit: |
||
nlimit = min(prime * steplength, limit) |
|||
for w in list(members): |
for w in list(members): |
||
n = w + steplength |
n = w + steplength |
||
while n <= |
while n <= nlimit: |
||
members.add(n) |
members.add(n) |
||
n += steplength |
n += steplength |
||
steplength = |
steplength = nlimit |
||
for w in sorted(members): |
for w in sorted(members): |
||
n = prime * w |
n = prime * w |
||
if n |
if n > steplength: break # no use trying to remove items that can't even be there |
||
members.remove(n) # no checking necessary now |
|||
primes.append(prime) |
primes.append(prime) |
||
prime = 3 if prime == 2 else min(m for m in members if m > 1) |
prime = 3 if prime == 2 else min(m for m in members if m > 1) |
||
if steplength < limit: |
if steplength < limit: |
||
for w in |
for w in sorted(members): |
||
n = w + steplength |
n = w + steplength |
||
if n > limit: break # no use etc... |
|||
while n <= limit: |
while n <= limit: |
||
members.add(n) |
members.add(n) |
||
n += steplength |
n += steplength |
||
return primes + sorted(members)[1:] |
|||
steplength = limit |
|||
primes += [m for m in members if m != 1] |
|||
return sorted(p for p in primes if p <= limit) |
|||
print(pritchard(150)) |
print(pritchard(150)) |