[Haskell-cafe] newbie optimization question

Prabhakar Ragde plragde at uwaterloo.ca
Sun Oct 28 10:23:34 EDT 2007


Jaak Randmets wrote:
> On 10/28/07, Prabhakar Ragde <plragde at uwaterloo.ca> wrote:
>> 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.
>>
> 
> You could try giving divisors type signature:
> divisors :: Int -> [Int]

Thank you. That brings the time down to 0.5 seconds. I'm glad it was 
something as simple as that. --PR


More information about the Haskell-Cafe mailing list