
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( http://book.realworldhaskell.org/read/functional-programming.html%28 See Infix function )
On Sun, Dec 1, 2013 at 12:52 PM, willie ekaputra
mailto: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 mailto:Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners