Frank posted some nice code on his blog: http://www.lshift.net/blog/2012/09/27/decomposing-the-ulam-spiral
Couldn't help myself coming up with a simpler (admittedly less efficient) version:
Display restoreAfter: [ size := 400 squared. primes := (Integer primesUpTo: size) asSet. step := 1. length := 1. pen := Pen new turn: 90. [step < size] whileTrue: [ 2 timesRepeat: [ length timesRepeat: [ pen fillColor: ((primes includes: step) ifTrue: [Color black] ifFalse: [Color white]). pen go: 1. step := step + 1]. pen turn: -90]. length := length + 1]].
- Bert -