import qualified Data.ByteString.Char8 as B import Data.Maybe import Data.Functor primes :: Int -> Double -> [(Double, Int)] primes n p = sieve (zip (replicate (n - 1) 1.0) [2..n]) where sieve [] = [] sieve ((l,x):xs) = (l,x):take (x - 1) xs ++ sieve (erase x (drop (x - 1) xs)) erase y ((l, x):xs) | x `mod` y == 0 = ((1 - p) * l, x):erase y xs | otherwise = (l, x):erase y xs erase _ [] = [] main = do l <- words <$> getLine let n = read (l !! 0) :: Int p = read (l !! 1) :: Double k = primes n p (putStrLn . show) (foldl (\ r (v, _) -> v + r) 0.0 k)