Here are the results:
Time (seconds)
C 3.137
Java 3.543
FreePascal 3.628
JavaScript 4.231
Me parece que valdría la pena incluir una prueba con la nueva característica de procesamiento paralelo de Delphi XE7. Aquí los códigos usados:
c
FreePascal
delphi
procedure Sieve(maxNum: int32); var Data: array of boolean; i,j: int32; begin SetLength( Data, maxNum+1 ); FillChar( Data[0], maxNum+1, true ); for i := 2 to maxNum do begin if Data[i] then begin j := i+i; while j<=maxNum do begin Data[j] := false; Inc( j, i ); end; end; end; end;
java
private static void SieveJava(int maxNum) { int i, j; boolean[] Data = new boolean[maxNum+1]; for (i=2; i<=maxNum; i++) { Data[i] = true; } for (i=2; i<=maxNum; i++) { if (Data[i]) { for (j=i+i; j<=maxNum; j+=i) { Data[j]= false; } } } }
javascript
function SieveRegularArray(maxNum) { var i; var j; var Data = new Array(); Data.length = maxNum + 1; for (i=2; i<=maxNum; i++) { Data[i] = true; } for (i=2; i<=maxNum; i++) { if (Data[i]) { for (j=i+i; j<=maxNum; j+=i) { Data[j] = false; } } } } function SieveBuffer(maxNum) { var i; var j; var Data = new Buffer(maxNum + 1); Data.fill(1); for (i=2; i<=maxNum; i++) { if (Data[i]) { for (j=i+i; j<=maxNum; j+=i) { Data[j] = 0; } } } } function SieveTypedArray(maxNum) { var i; var j; var Data = new Uint8Array(maxNum + 1); for (i=2; i<=maxNum; i++) { Data[i] = 1; } for (i=2; i<=maxNum; i++) { if (Data[i]) { for (j=i+i; j<=maxNum; j+=i) { Data[j] = 0; } } } }