Sieve of Eratosthenes

Davide Varvello d.varvello at
Mon Oct 9 20:52:45 UTC 2006

Hi All,
I did some performance tests comparing java and squeak. The java code is this:
public class GeneratePrimes {
	public static double generate(int n) {
		long start = System.currentTimeMillis();
		boolean sieve[] = new boolean[n];
		Arrays.fill(sieve, true);
		sieve[0] = false;
		sieve[1] = false;
		for (int i = 2; i < n; i++) {
			if (sieve[i]) {
				for (int j = 2 * i; j < n; j += i) {
					sieve[j] = false;

		return (System.currentTimeMillis() - start);

The Squeak one is:

runOn: aNumber 
	| sieve |

	sieve := Array new: aNumber withAll: true.
	sieve at: 1 put: false.

	(2 to: aNumber) do: [:i | (sieve at: i) ifTrue: [(i to: aNumber by: i) do: [:k | sieve at: k put: false] ]

The Squeak code is better (of course) but on a number of 1000000 Java spends 94 msec instead Squeak 2650!
Am I using the right approach or should I change something in my squeak code to make it perform better (but preserving clearness)?

Win xp, 3 ghz, Squeak 3.8, jdk 1.4.2 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/ms-tnef
Size: 2918 bytes
Desc: not available
Url :

More information about the Squeak-dev mailing list