
andrewcoppin:
Hi guys.
Somebody just introduced me to a thing called "Project Euler". I gather it's well known around here...
Anyway, I was a little bit concerned about problem #7. The problem is basically "figure out what the 10,001st prime number is". Consider the following two programs for solving this:
First, somebody else wrote this in C:
int n = 2 , m , primesFound = 0;
for( n=0;n < MAX_NUMBERS;n++ ) if( prime[n] ) { primesFound++;
if( primesFound == 10001 ) cout << n << " is the 10001st prime." << endl;
for(m=2*n;m
Second, my implementation in Haskell:
primes :: [Integer] primes = seive [2..] where seive (p:xs) = p : seive (filter (\x -> x `mod` p > 0) xs)
main = print (primes !! 10000)
This is an FAQ. Unless you use the same algorithm and data types in benchmarks, you're not really benchmarking anything. And expecting one of the worst possible algorithms to be good is hoping for a little too much :) When you do use similar data types and algorithms, you get similar performance: http://shootout.alioth.debian.org/gp4/benchmark.php?test=nsievebits&lang=all I'll reiterate: use the same data structures and algorithms, if you want the same performance. -- Don