On Wednesday, 16 May 2012 at 07:41:14 UTC, Jonathan M Davis wrote:
void main()
{
    prime_walk pw;
    pw.cap = 100;
    foreach(i; pw)
        writefln("%s %s", i, pw.position);
}

You'd see that pw.postion is always printed as 2, just like Nick's foo.val
always prints as 0.

 Hmmm...
[quote]
void main()
{
   Foo foo;
   foreach(val; foo)
       writeln(foo.val, " ", val);
}
[/quote]

Indeed... he is using foo.val isn't he? Instead he should just use 'val' by itself.



Quick overview, my little prime walker is dropping the requirement of checking for if a number is prime by only going up and being on valid prime numbers. Each time the old prime is used it's stepped up in the array (and can't step on another used element), this removes your 'is this a prime' down to basically O(1). You can't ask randomly is x a prime, but if you needed a range of primes you can get quite a large list very quickly. Half of it is there for optimization purposes.

Reply via email to