Squeak
  links to this page:    
View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide
Prime numbers demo
Last updated at 6:42 pm UTC on 25 October 2018
ML Karl Ramberg Thu, Oct 25, 2018 at 10:05 AM

  diff := OrderedCollection new.
   singular := 2.
   3 to: 5000000 do:[: i | i isPrime ifTrue:[ diff add: i - singular.
	singular := i]].
  form := Form extent:8000@8000.
  pen := Pen newOnForm: form.
  pen up.
  pen goto: 100@6000.
  pen down.
  pen turn: 90.
  pen color: Color black.
  diff do:[:i | pen go: i. pen turn: 90].
  form writePNGfileNamed:  'Sketch.png'





Levente Uzonyi Thu, Oct 25, 2018 at 6:34 PM

The ultimate tool for such use case is Integer >> #primesUpTo:(do:).
The code below is 3 times faster on my machine:

form := Form extent:8000@8000.
pen := Pen newOnForm: form.
pen up.
pen goto: 100@6000.
pen down.
pen turn: 90.
pen color: Color black.
previousPrime := nil.
Integer primesUpTo: 5000000 do: [ :prime |
        previousPrime ifNotNil: [
                pen
                        go: prime - previousPrime;
                        turn: 90 ].
        previousPrime := prime ].
form writePNGfileNamed: 'Sketch.png'