import qualified Data.ByteString.Char8 as B import Data.Maybe import Data.Functor readInts :: B.ByteString -> [Int] readInts x = fst <$> mapMaybe B.readInt (B.words x) getParams :: B.ByteString -> (Int, Int) getParams x = (x' !! 0, x' !! 1) where x' = readInts x primes :: Int -> [Int] primes n = sieve [2..n] where sieve (x:xs) = x : sieve ([y | y <- xs, y `mod` x /= 0]) sieve [] = [] main = do l <- words <$> getLine let n = read (l !! 0) :: Int p = read (l !! 1) :: Double k = foldr (\ v r -> r + p * (fromIntegral (n `div` v - 1))) 0.0 (primes n) (putStrLn . show) k