Once you've made those changes, you also need

n `mod` 2^k

instead of 2^k `mod` n.

Finally, using e `div` f, and round() in the definitions of e and f, to give you the largest power of 2 dividing n doesn't work correctly. For example:
maxexp2 4 = 1 (should be 2)
maxexp2 16 = 3 (should be 4)
maxexp2 18 = 0 (should be 1)
maxexp2 28 = 0 (should be 2)

But that's not a Haskell error, that's a problem with the algorithm.

(Sorry if I've misinterpreted what you're trying to do.)

Graham

On 01/12/2013 3:17 AM, mukesh tiwari wrote:
Hi Willie,
Here is the code  modified
maxexp2:: Int -> Int
maxexp2 n
    |n== 0 || 2^k `mod` n /=0 =0
    |otherwise = k
          where
            k = e `div` f
            e  = round  ( log ( fromIntegral n ) )
            f = round ( (log 2.0 ))

When you computing  k then use backticks (`) [1]  not the single quote ( ' )

[1] http://book.realworldhaskell.org/read/functional-programming.html( See Infix function )


On Sun, Dec 1, 2013 at 12:52 PM, willie ekaputra <willieekaputra@gmail.com> wrote:

Hi everyone !
I am newbie and I made this code for counting k, so that 2^k divisor of n.Somehow it doesn't work.
Anyone knows what is  wrong?

Regards and thanks.
Wili.

maxexp2:: Int -> Int
maxexp2 n
    |n== 0 || 2^k 'mod' n /=0 =0
    |otherwise = k
          Where
           k= e ' div' f
           e=round (fromIntegral (log n))
            f = round (fromIntegral (log 2))


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners




_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners