タイトル通りですが、下記のコードにおいてどこで0除算がされているかわかりません。
当方Haskellを始めたばかりで、このプログラムが問題をとけるプログラムなのかどうかという確証も持てませんが、下記の二点について助言をいただきたいです。
- 0除算が発生している箇所
- このプログラムがこの問題を解決できるものか
- 1において、解決できない場合、正しいアルゴリズムはなにか。また、どうやって実装するか。(流れだけ)
試したこと
- m<=0のときの返り値を1で一定にする
- n==mのときの返り値を1で一定にする
該当コード
Haskell
1import Control.Monad 2import Data.Array 3import qualified Data.ByteString.Char8 as BS 4import Data.List 5import Data.Maybe 6 7readInts :: IO [Int] 8readInts = map (fst . fromJust . BS.readInt) . BS.words <$> BS.getLine 9 10main = do 11 [x, y] <- map read . words <$> getLine 12 print $ solve x y `mod` 1000000007 13 14solve :: Int -> Int -> Int 15solve x y = sum [check x y a | a <- [0 .. x]] 16 17check :: Int -> Int -> Int -> Int 18check x y a 19 | x - a `mod` 2 == 1 = 0 20 | y == (2 * a) + b = c (a + b) a 21 | otherwise = 0 22 where 23 b = (x - a) `div` 2 24 c n m = product [n,n - 1 .. 1] `div` (product [m,m - 1 .. 1] * product [n - m,n - m - 1 .. 1]) 25
エラーが起きるテスト(入力)
terminal
1999999 999999
正しい出力
terminal
1151840682
手元環境でのエラー(Intellij-Haskell)
termial
1/usr/bin/stack build --exec AtCoder-exe 2999999 999999 3AtCoder-exe: divide by zero 4Received ExitFailure 1 when running 5Raw command://ここには実行ファイルの絶対パスがあります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/12 21:18
2019/12/12 21:42