Let's see how quickly we can calculate primes less than a million in other languages. Sieve of Eratosthenes is used again without any non-obvious language-specific optimizations.
For comparison, Python with the default interpreter takes 375ms.
Possibly the fastest, takes around 20ms!
Node does it in around 90ms, while in the browser it takes anywhere between 100-200ms.
For comparison, Python with the default interpreter takes 375ms.
Java
import java.util.ArrayList; import java.util.Arrays; import java.util.Date; public class Primes { public static ArrayList<Integer> gen_primes(int n) { boolean[] temp = new boolean[n]; Arrays.fill(temp, true); temp[0] = temp[1] = false; ArrayList<Integer> primes = new ArrayList<Integer>(); for(long i = 0 ; i < n ; i++) { if (temp[(int) i]) { primes.add((int) i); for(long j = i * i ; j < n ; j += i) { temp[(int) j] = false; } } } return primes; } public static void main(String[] args) { Date d = new Date(); long c = d.getTime(); ArrayList<Integer> p = gen_primes(1000000); System.out.println((new Date()).getTime() - c); } }
Possibly the fastest, takes around 20ms!
Node / JS
(function() { function gen_primes(n) { var temp = []; for( var k = 0; k < n; k++ ) { temp.push(true); } temp[0] = temp[1] = false; var primes = []; for( var i = 0; i < n; i++) { if (temp[i]) { primes.push(i); for( var j = i * i; j < n ; j += i ) { temp[j] = false; } } } } var now = Date.now(); gen_primes(1000000); console.log(Date.now() - now); })();
Node does it in around 90ms, while in the browser it takes anywhere between 100-200ms.
C#
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace primes_test { class Program { public static ArrayList gen_primes(int n) { bool[] temp = new bool[n]; for (int i = 0; i < n; i++) { temp[i] = true; } temp[0] = temp[1] = false; ArrayList primes = new ArrayList(); for (long i = 0; i < n; i++) { if (temp[(int)i]) { primes.Add((int)i); for (long j = i * i; j < n; j += i) { temp[(int)j] = false; } } } return primes; } static void Main(string[] args) { DateTime begin = DateTime.UtcNow; ArrayList a = gen_primes(1000000); DateTime end = DateTime.UtcNow; Console.WriteLine((end - begin).TotalMilliseconds); Console.ReadKey(); } } }
Almost as fast as Java, 22ms.
No comments:
Post a Comment