module Main where

import Control.Parallel
import Data.List (find)
import Data.Maybe (maybe)

--import Parallelizable
parallelize a b = a `par` (b `pseq` (a, b))

test :: Integer -> Integer -> Integer
test n1 n2 = let (p1, p2) = parallelize
                              (product $ factors $ product [1..n1])
                              (product $ factors $ product [1..n2])
             in p2 `div` p1

{-# NOINLINE factors #-}
factors n = maybe [n] (\k-> (k : factors (n `div` k))) (find (\k-> n `mod` k == 0) [2 .. n - 1])

main = print (test 4000 4001)
