import Control.Applicative import Data.Array.IO import Data.Array readInt :: String -> Int readInt = read readDouble :: String -> Double readDouble = read sumA :: [Int] -> Array Int Double -> Double sumA indexes ary = foldl (\ acc i -> acc + ary!i) 0.0 indexes main :: IO() main = do [ns,ps] <- words <$> getLine let n = readInt ns let m = n + 1 let p = readDouble ps l <- newArray (2,m) 1.0 :: IO(IOArray Int Double) sequence_ [sequence_ [(writeArray l j) =<< (*) (1-p) <$> (readArray l j) | j <- [i+i,i+i+i..n]] | i <- [2,3..n] ] print =<< (sumA [2,3..n] <$> freeze l)