見出し画像

遅延評価を使う

競プロ典型 90 問 25 日目 - Digit Product Equation(★7)

main = interact $ show . sol . map (read @Int) . words

sol (n:b:_) 
  | n<b = 0
  | otherwise = length s + if f b==0 then 1 else 0
  where
  g p = takeWhile (<=n-b) . iterate (* p)
  s = g 2 1 >>= g 3 >>= g 5 >>= g 7 >>= \p -> 
    if f (p+b)==p then return p else []

f m = case quotRem m 10 of
  (_,0) -> 0
  (0,r) -> r
  (q,1) -> f q
  (q,r) -> r*f q

いいなと思ったら応援しよう!

karoyakani
ありがとう