http://www.perlmonks.org?node_id=610313


in reply to Re: ulam's spiral too slow
in thread ulam's spiral too slow

Your is_prime function claims that 4 is a prime number. Would you please please please check on even-ness of a number, before you even start going through the whole checking loop?

Replies are listed 'Best First'.
Re^3: ulam's spiral too slow
by liverpole (Monsignor) on Apr 16, 2007 at 12:53 UTC
    Thanks for catching that.  I just noticed the bug in my code, which is:  although I'm caching prime numbers, I'm not testing all of them as potential factors.

    I'll go update the code now, but you're right; there needs to be a check for division by 2.


    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
      thanks, your code is much faster than mine, and now it produce the same figure as in the
      http://en.wikipedia.org/wiki/Ulam_spiral
      after we invert the colors
      one small note is that your code will plot number 1 as a prime number, we can find this if we insert
      print "number of primes = $NumOfPrimes \n"; before the mainloop; and try the program with number 10 , it will give us the number of primes is 5
      as a variation i suggest for the invistigators for small spirals to replace the main plotting code:
      $c->createText( $x*+$o, $y+$o, -fill => "$colr", -text => '.'); with
      $c->createText( $x*30+$o, $y*30+$o, -fill => "$colr", -text => "$num"); so we can see numbers instead of dots in wich the primes will be in white color , the factor 30 above is for magnification of the plotting.