[Haskell-cafe] newbie optimization question

jerzy.karczmarczuk at info.unicaen.fr jerzy.karczmarczuk at info.unicaen.fr
Sun Oct 28 11:00:43 EDT 2007


Prabhakar Ragde writes: 

> For the purposes of learning, I am trying to optimize some variation of 
> the following code for computing all perfect numbers less than 10000. 
> 
> divisors i = [j | j<-[1..i-1], i `mod` j == 0]
> main = print [i | i<-[1..10000], i == sum (divisors i)] 
> 
> I know this is mathematically stupid, but the point is to do a moderate 
> nested-loops computation. On my 2.33GHz dual-core MacBookPro, the obvious 
> C program takes about .3 seconds, and a compiled OCaML program (tail 
> recursion, no lists) about .33 seconds. The above takes about 4 seconds. 
> 
> I've tried using foldl', and doing explicit tail recursion with strict 
> accumulators, but I can't get the running time below 3 seconds. Is it 
> possible to come within striking distance of the other languages? Thanks. 

Just a trivial comment... 

1. Don't speak about comparing *languages* when you compare *algorithms*,
  and in particular data structures.
2. Please, DO code the above in C, using linked lists. Compare then. 

3. Check the influence of bare printing, separated from the computation. 

Jerzy Karczmarczuk 



More information about the Haskell-Cafe mailing list